質問

まず、

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をエクスポートできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top