1

使用 VS2010,我正在围绕一个在其公共接口中使用 MFC CStrings 的非托管 C++ DLL 构建一个 C++/CLI 包装 DLL。非托管 C++ DLL 包含一个我需要访问的类。我的问题是这个类包含使用 CString 引用的方法,例如:

BOOL GetUnits(eSysOfUnits sysUnit, CString &Unit, Cstring &Format);

在我的 C++/CLI 包装器中,我试图像这样访问它

BOOL GetUmUnits(eSysU sysunit, String^ %cunit, String^ %format)
{
   GetUnits(sysunit, marshal_as<CString>(cunit), marshal_as<CString>(format));
}

这给了我一个编译器错误说明

C2665: msclr::interop::marshal_as : 3 个重载都不能转换所有参数类型

GetUmUnits 将通过 C# 表单访问。cunit 和 format 需要由非托管代码更新。

我做错了什么不可能吗?

4

1 回答 1

1

您的包装器必须将托管对象转换String^为实际CString对象并直接传递它。编组器不知道如何创建CString对象。

不同版本的 MFC有不同的CString版本,因此您必须链接到与非托管 DLL 构建一个相同的 MFC 版本。

于 2012-04-26T17:09:00.107 回答