如何使用 CString 引用调用非托管C++ DLL

How to call an unmanaged C++ DLL With CString Reference

本文关键字:C++ DLL 调用 何使用 CString 引用      更新时间:2023-10-16

使用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::互操作::marshal_as:3 个重载都无法转换所有参数类型

GetUmUnits将通过C#表单访问。 Cunit和格式需要由未管理的代码更新。

我做错了什么,不可能吗?

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

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