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