我在C ++ / CLI中加载类型库。在C#中,它的加载成功,但它在托管C ++ / CLI中的异常后一次又一次地给出。
在LoadTypeLibEx System.ArgumentException上发生异常:值不会下降 在预期范围内
at LoadTypeLib(String strTypeLibName,ITypeLib typeLib)
这是一个PInvoke签名:
[DllImport("oleaut32.dll", CharSet = CharSet::Unicode, PreserveSig = false)]
static void LoadTypeLib(String^ strTypeLibName, [MarshalAs(UnmanagedType::Interface)] [Out] System::Runtime::InteropServices::ComTypes::ITypeLib^ typeLib);
我的代码:
ITypeLib^ oTypeLib;
LoadtypeLib(TLB, oTypeLib);
我被困在这里。请帮我解决这个例外。
此致 乌斯曼
答案 0 :(得分:1)
使用C ++ / CLI,通常您希望使用公共头文件中的原型调用API函数,而不是自己编写p / invoke声明。编译器将使用C ++ interop或p / invoke,具体取决于您使用的是/ clr还是/ clr:pure。
无论如何,第二个参数应该是引用传递。在C#中,它使用out
关键字。在C ++ / CLI中,out参数的语法是:
void func([Out] Type% arg1);
在你的情况下,也许
static void LoadTypeLib(String^ strTypeLibName, [Out] ComTypes::ITypeLib^% typeLib);