Tlbimport(从C#库生成的tlb)

时间:2016-10-25 11:41:20

标签: c# c++ tlb midl comvisible

我们创建了一个简单的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并使用:

导入库(" ClassLibrary1.tlb&#34);在idl文件中。

问题是可以在idl中使用intarface类型(IMyTestInterface),但结构不可访问,我们不知道原因。

所以这个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);  
};

这不是:

导入库(" STDOLE2.TLB&#34);     导入库(" ClassLibrary1.tlb&#34);

[
    object,
    uuid(DB25FC11-C288-4B31-BE11-5BBA6B273D9B),
    dual,
    nonextensible,
    pointer_default(unique)
]
interface IMyNativeTestObj : IDispatch
{
    [id(1)] HRESULT MyFunction([in] MyTestStruct  *Parameter);  
};

我们尝试使用相同结果的tagMyTestStruct。如果我们用OleView" MyTestStruct"打开tlb。就在其中。

0 个答案:

没有答案