Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tlbimport(从C#库生成的tlb)_C#_C++_Tlb_Midl_Comvisible - Fatal编程技术网

Tlbimport(从C#库生成的tlb)

Tlbimport(从C#库生成的tlb),c#,c++,tlb,midl,comvisible,C#,C++,Tlb,Midl,Comvisible,我们创建了一个简单的C#类库,如下所示(ClassLibrary1): 从中导出tlb并使用: importlib(“ClassLibrary1.tlb”);在idl文件中 问题是intarface类型(IMyTestInterface)可以在idl中使用,但是结构是不可访问的,我们不知道为什么 因此,可以编译此idl: importlib("stdole2.tlb"); importlib("ClassLibrary1.tlb"); [ object, uuid(DB25FC

我们创建了一个简单的C#类库,如下所示(ClassLibrary1):

从中导出tlb并使用:

importlib(“ClassLibrary1.tlb”);在idl文件中

问题是intarface类型(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”)


我们尝试了tagMyTestStruct,得到了相同的结果。如果我们打开包含OleView“MyTestStruct”的tlb。

struct
s是一个互操作问题。如果您想使用该工具自动生成TLB和头文件,请使用接口。C语言处理结构标记的愚蠢方式也适用于IDL。您必须使用
struct MyTestStruct*
。使用结构时一定要小心,您必须正式使用IRecordInfo来访问成员。您将获得两个简单的
int
成员,因为几乎每种语言都为该结构选择相同的布局,如果字段类型更复杂,则情况可能并非如此。破坏GC堆不是一件乐事。好吧,从技术上讲,这是不可能的,也不建议这样做。然后我们将声明移到C++侧,然后将结构转换为接口。谢谢。
struct
s是一个互操作问题。如果您想使用该工具自动生成TLB和头文件,请使用接口。C语言处理结构标记的愚蠢方式也适用于IDL。您必须使用
struct MyTestStruct*
。使用结构时一定要小心,您必须正式使用IRecordInfo来访问成员。您将获得两个简单的
int
成员,因为几乎每种语言都为该结构选择相同的布局,如果字段类型更复杂,则情况可能并非如此。破坏GC堆不是一件乐事。好吧,从技术上讲,这是不可能的,也不建议这样做。然后我们将声明移到C++侧,然后将结构转换为接口。谢谢
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);  
};
[
    object,
    uuid(DB25FC11-C288-4B31-BE11-5BBA6B273D9B),
    dual,
    nonextensible,
    pointer_default(unique)
]
interface IMyNativeTestObj : IDispatch
{
    [id(1)] HRESULT MyFunction([in] MyTestStruct  *Parameter);  
};