質問
まず、
ATLなしで plain C ++を使用すると、MFCはCOMオブジェクトインターフェイスを使用しようとします。
oleview (OLE / COMオブジェクトビューア)の使用-IDLコードの設計に使用。
この段階で、 MIDL コンパイラを使用して、次のものを生成しようとすると問題が発生します。
cmd行の構文:
midl / nologo / env win32 / tlb"。\ S8_.tlb" / h"。\ S8_.h" / iid"。\ S8_i.c" S8.idl
- 対応する.TLB(タイプライブラリ)
- A .H(ヘッダー)
- IID定義インクルードファイル(* _i.c)
- プロキシ(* _p.c)
MIDLコンパイラエラー:
S8.IDL(513):エラーMIDL2025:構文エラー:" S8SimObject"付近の型指定が必要です
HRESULT LinkSimObjects(
[in] S8SimObject* SourceObject, ####line 513 ####
[in] S8SimObject* DestObject,
[in] float TravelTime);
解決 2
MIDLコンパイラエラー
S8.IDL(513): error MIDL2025 :構文エラー:" S8SimObject"
の近くに型指定が必要です解決済み
forward宣言を追加-IDLファイルのトップに:
- import" ocidl.idl&quot ;;
- インターフェイスS8SimObject;
他のヒント
まあ、ここではあなたの質問を本当に理解していませんが、以下が役立つはずです:
- パブリック列挙型定義は、本当にパブリックであるために独自の uuid を持つ必要があります。
- これらの列挙型定義は、実際に何らかのインターフェイスメソッドで使用されない限り、タイプライブラリに入れられないことがわかりました。この理由はわかりませんが、おそらく単純なものを見落としました(その列挙型をライブラリブロックに追加するなど)。
-
short
は、通常、単精度浮動小数点数ではなく、短整数を意味します。 - VBでは
float
に相当するものはsingle
ですが、他の質問で見たように、実際にはsingle
float
を含むcode>。
ところで、最小限の(コンパイル可能な)IDLファイル(ほとんどの定義が削除されている)を投稿することをお勧めします。これは、たとえば、テキストで IS8Simulation
を使用しているが、コピーしたIDLスニペットでは S8SimObject
を使用しているため、混乱を防ぐのに役立ちます。また、期待される結果と予期しない(あなたのための)エラーを指定する場合にも役立ちます。
編集
まあ、今挿入したこのコンパイルエラーは単純です: S8SimObject
は定義されていません。メソッド宣言( IS8Simulation
)でインターフェイスを常に参照する必要があります。インターフェイスを実装するコクラスを参照することはありません。
ここで既存のIDLファイルを変更すると言ったように、基本的な目標は何ですか?元のIDLファイルが常に S8SimObject
を使用している場合、唯一の問題は S8SimObject
の定義がIDLファイルの先頭に含まれていないことです。 S8SimObject
を定義するタイプライブラリがある場合は、OleViewを使用してこのインターフェイスのIDLをエクスポートできます。