我们创建了一个简单的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。就在其中。