是否可以使用COM调用参数化构造函数? 我将创建一个C#类的实例,它具有COM参数化构造函数。 现在它提出了内存消除。所以我不确定带有COM的参数化构造函数的C#类的实例化。所以请让我知道同样的事情。
我的C#构造函数是
public GetNumberFromClass(NumberClass number)
{
}
C ++构造函数:
NumberFromC#::NumberFromC#
{
getNumberFromClassPtr.CreateInstance(__uuidof(GetNumberFromClass));
}
并且指针getNumberFromClassPtr因为它为NULL而抛出内存异常。
答案 0 :(得分:3)
这是不可能的,COM没有将参数传递给构造函数的机制。这在您的C ++代码段中最明显,您根据需要使用__uuidof关键字指定了类的GUID,但未传递 NumberClass 参数。你不能。
接下来出现的问题是您没有检查错误,CreateInstance()返回HRESULT。哪会告诉你方法失败了。嵌入式接口指针仍然是NULL,当你继续开机时,这会使你的程序受到访问冲突。
首先在C#类中删除该构造函数,开始修复它,它必须有一个可供COM使用的默认构造函数。添加 NumberClass 类型的属性,以便在创建对象后设置该值。当然,改进C ++代码中的错误处理,如果你没有任何问题,这些失败就会变得完全不可识别。您必须检查CreateInstance()的返回值,并且必须在使用该对象的代码中添加try / catch块,以便捕获在方法调用失败时将抛出的_com_error异常。