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

问题描述 投票:1回答: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和格式需要由非管理代码更新。

我做错了什么是不可能的?

c# c++ mfc command-line-interface
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.