1

次のような単純な 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" が含まれています。

4

0 に答える 0