私はCOMオブジェクトをC++で書いていますが、単純型(int/boolなど)のシーケンスのtypedefを宣言し、その型の変数をC#で作成するためにアクセスしようとしています。このCOMオブジェクトへの参照 私はここに追加私は2つのオプションを書いたtypdefを宣言しようとしました - しかし、それらのどれも私のために働いています - 私はこのタイプのパラメータを私のC#クラスで初期化することはできません。COMオブジェクトidlでtypdefを宣言するには?
[
uuid(0EA0AD9B-9314-4480-8C69-22719C2EA9CF),
version(1.0),]
library ATLProject9Lib
{
typedef [public,uuid(9d286340-62c4-11e6-8b77-86f30ca893d3)]
int aaa;
typedef [public]
double numberToAdd;
struct BarStruct;
importlib("stdole2.tlb");
[
uuid(172B34D8-5D19-4635-B4AD-9171F522CA0A)
]
dispinterface _IScheduleEvents
{
properties:
methods:
};
[
uuid(34413E93-0916-4773-99C4-79163A44E4A0)
]
coclass Schedule
{
[default] interface ISchedule;
[default, source] dispinterface _IScheduleEvents;
};
};
第二の問題:例えばint型の配列をtypdefを宣言:このコードはコンパイルされていない
typedef [public,uuid(9d286340-62c4-11e6-8b77-86f30ca893d3)]
sequence<int> aaa;
typedef [public]
double numberToAdd;
は、ここに私のIDLの関連部分(ライブラリ)です。私は次のエラーを取得してい :
1>.\ATLProject9.idl(47): error MIDL2025: syntax error : expecting a declarator or * near "<"
1>.\ATLProject9.idl(47): error MIDL2025: syntax error : expecting ; or , near "<"
1>.\ATLProject9.idl(47): error MIDL2026: cannot recover from earlier syntax errors; aborting compilation
COMオブジェクトに(単純型のため、シーケンス用)のtypedefを宣言するための正しい方法は何ですか?
こんにちは、 お返事ありがとうございます。 しかし、私は完全にお互いを理解しているかどうかはわかりません。 私たちが何をしようとしているのかを説明します: 私たちのC#コードからidl関数を呼び出したいと思います。この関数は、パラメータとしていくつかのtypedef変数を取得します。 私たちは私たちのidlでこれらの型定義を宣言しようとしています。これをC |#で作成し、このidl関数にパラメータとして送ることができます。 – thechmodmaster
"typedef変数"について話すのを止めなければならないでしょう、それは私たちがあなたを助けるのに役立たない全く意味のない言い回しです。IDLにコクラスを必要とする 'new'ステートメントでC#プログラムに何かを作成します。または、COMオブジェクトにインターフェイスポインタを返すファクトリ関数を必要とするようにCOMオブジェクトを作成するよう依頼します。 –