0

まず、

プレーンC++を使用し、ATLを使用せずに、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);
4

2 に答える 2

1

ここであなたの質問をよく理解していませんが、次のことが役に立ちます。

  • 公開列挙型の定義は、実際に公開するために独自のuuidを持つ必要があります。
  • これらの列挙型定義は、実際に何らかのインターフェイス メソッドで使用されない限り、タイプ ライブラリには含まれないことがわかりました。この理由はわかりません。おそらく単純なものを見逃していました(その列挙型をライブラリブロックに追加するなど)。
  • short通常、単精度浮動小数点数ではなく、短い整数を意味します。
  • に相当するものfloatsingleVB にありますが、他の質問で見たように、実際にsinglefloat.

ところで、最小限の (コンパイル可能な) IDL ファイル (ほとんどの定義を取り除いたもの) を投稿することをお勧めします。これは、コンパイルしようとしているものと多かれ少なかれ似ています。これは、たとえばIS8Simulationテキストで使用しているがS8SimObject、コピーした IDL スニペットで使用しているため、混乱を防ぐのに役立ちます。また、予想される結果と予期しない (あなたにとっての) エラーを指定すると役立ちます。

編集

さて、挿入したこのコンパイル エラーは単純ですS8SimObject。定義されていません。メソッド宣言 ( ) では常にインターフェイスを参照する必要があり、インターフェイスIS8Simulationを実装するコクラスを参照する必要はありません。

あなたが言ったように、ここで既存の IDL ファイルを変更しています: 基本的な目標は何ですか? 元の IDL ファイルが常に を使用している場合、IDL ファイルの先頭にS8SimObjectの定義がS8SimObject含まれていないことが唯一の問題でしょうか? タイプ ライブラリの定義があれば、S8SimObjectOleView を使用してこのインターフェイスの IDL をエクスポートできます。

于 2009-01-10T16:50:28.550 に答える
1

MIDL コンパイラ エラー

S8.IDL(513):エラー MIDL2025 : 構文エラー: "S8SimObject"に近い型指定が必要です

解決した

前方宣言を追加します- IDL ファイルの TOP に:

  • "ocidl.idl" をインポートします。
  • インターフェイス S8SimObject;
于 2009-01-11T22:42:50.460 に答える