为什么在LoadTypeLib System.ArgumentException上发生异常:值不在预期范围内?

时间:2010-06-07 17:00:33

标签: interop c++-cli com-interop typelib

我在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);

我被困在这里。请帮我解决这个例外。

此致 乌斯曼

1 个答案:

答案 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);