gpt4 book ai didi

c# - 使用来自 COM 的参数化构造函数实例化类

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:06 24 4
gpt4 key购买 nike

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

我的 C# 构造函数是

public GetNumberFromClass(NumberClass number)
{
}

C++ 构造函数:

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

指针 getNumberFromClassPtr 在它变为 NULL 时抛出内存异常。

最佳答案

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

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

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

关于c# - 使用来自 COM 的参数化构造函数实例化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19289427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com