如何使用CString参考调用非托管C ++ DLL
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用CString参考调用非托管C ++ DLL相关的知识,希望对你有一定的参考价值。
使用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和格式需要由非管理代码更新。
我做错了什么是不可能的?
答案
你的包装器必须将托管的String^
转换为实际的CString
对象并直接传递它。编组人员不知道如何创建CString
对象。
在不同版本的MFC中有不同版本的CString
,因此您必须链接到非托管DLL构建一个版本的MFC版本。
以上是关于如何使用CString参考调用非托管C ++ DLL的主要内容,如果未能解决你的问题,请参考以下文章
.Net调用非托管代码(P/Invoke与C++InterOP)