如何使用 CString 引用调用非托管C++ DLL
本文关键字:C++ DLL 调用 何使用 CString 引用 | 更新日期: 2023-09-27 18:32:32
使用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 版本。