4

是否可以用 COM 调用参数化构造函数?我将创建一个具有 COM 参数化构造函数的 C# 类的实例。现在它引发了内存异常。所以我不确定带有 COM 参数化构造函数的 C# 类的实例化。所以请让我知道同样的事情。

我的 C# 构造函数是

public GetNumberFromClass(NumberClass number)
{
}

C++ 构造函数:

NumberFromC#::NumberFromC#
{
    getNumberFromClassPtr.CreateInstance(__uuidof(GetNumberFromClass));
}

并且指针 getNumberFromClassPtr 在出现 NULL 时会引发内存异常。

4

1 回答 1

3

这是不可能的,COM 没有将参数传递给构造函数的机制。这在您的 C++ 片段中最为明显,您根据需要使用 __uuidof 关键字指定了类的 GUID,但您没有传递NumberClass参数。你不能。

接下来出现的问题是您没有检查错误,CreateInstance() 返回一个 HRESULT。这会告诉你该方法失败了。嵌入式接口指针仍然为 NULL,当您继续前进时,这将使您的程序因访问冲突而崩溃。

首先在你的 C# 类中去掉那个构造函数来解决这个问题,它必须有一个默认的构造函数才能被 COM 使用。添加NumberClass类型的属性,以便您可以在创建对象后设置该值。当然,还要改进 C++ 代码中的错误处理,如果您没有任何故障,这些故障将变得完全无法诊断。您必须检查 CreateInstance() 的返回值,并且必须在使用该对象的代码中添加 try/catch 块,以便捕获方法调用失败时将引发的 _com_error 异常。

于 2013-10-10T08:50:12.017 回答