次のような単純な C# クラス ライブラリを作成しました (ClassLibrary1)。
[ComVisible(true)]
public struct MyTestStruct
{
public int z;
public int h;
}
[ComVisible(true)]
public interface IMyTestInterface
{
void MyTestFunction();
}
[ComVisible(true)]
public class CMyTestCom : IMyTestInterface
{
public void MyTestFunction()
{
}
}
そこから tlb をエクスポートして使用します。
importlib("ClassLibrary1.tlb"); idl ファイルで。
問題は、interface 型 (IMyTestInterface) を idl で使用できることですが、構造体にアクセスできず、その理由がわかりません。
したがって、この idl はコンパイルできます。
importlib("stdole2.tlb");
importlib("ClassLibrary1.tlb");
[
object,
uuid(DB25FC11-C288-4B31-BE11-5BBA6B273D9B),
dual,
nonextensible,
pointer_default(unique)
]
interface IMyNativeTestObj : IDispatch
{
[id(1)] HRESULT MyFunction([in] IMyTestInterface *Parameter);
};
そして、これはそうではありません:
importlib("stdole2.tlb"); importlib("ClassLibrary1.tlb");
[
object,
uuid(DB25FC11-C288-4B31-BE11-5BBA6B273D9B),
dual,
nonextensible,
pointer_default(unique)
]
interface IMyNativeTestObj : IDispatch
{
[id(1)] HRESULT MyFunction([in] MyTestStruct *Parameter);
};
同じ結果で tagMyTestStruct を試しました。OleView で tlb を開くと、"MyTestStruct" が含まれています。