1

我有一个需要使用 COM 互操作与 .NET dll 交互的 c++ 类。

我有:

1. C++调用的方法,操作对象为.net实例:

   m_pCommManager.CreateInstance(__uuidof(CHmHTTPManager));
    m_pCommManager->Communicate(/*string parameter*/);

2.具有以下方法的.net接口,C++类应遵守:

 void ResponseRecieved(/*string parameter*/)

我的问题是:我应该选择的参数类型是:

A. 易于在两侧作为字符串进行操作(即使通过铸造)。

B. 两种环境都可以接受(我不能对 C++ 和 .net 使用“字符串”,因为它不一样)

具体的使用示例非常受欢迎。

4

1 回答 1

0

您应该在 C++ 中使用BSTR字符串。

来自 MSDN:

BSTR 是一种复合数据类型,由长度前缀、数据字符串和终止符组成。下表描述了这些组件。

BSTR 是使用 COM 内存分配函数分配的,因此可以从方法中返回它们而无需考虑内存分配。

在您的 COM 对象的 IDL 文件中,它将是:

HRESULT mySampleMethod([in] BSTR mySampleParam);

C++ 中的实际代码的外观将取决于您正在开发的 COM 对象/类型库的类型(我的意思是您使用的是基于 MFC 的 COM 对象还是基于 ATL 的 COM 对象)。在任何情况下,我都建议您使用 Visual Studio 中的向导来创建/修改您的类型库。

在 .Net 端,你只使用普通的字符串类型,如果参数在你的 COM 对象的类型库中定义为 BSTR,它将自动封送。

您可能还会发现这个问题很有用:

从 C# 将 BSTR 传递到 COM 函数的约定(COM 互操作)

于 2012-06-28T15:56:04.393 回答