Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何调用非托管C++;带有CString引用的DLL 我使用VS2010在非托管C++ DLL中构建一个C++/CLI包装器DLL,它在其公共接口中使用MFC cSnc++。非托管C++ DLL包含一个我需要访问的类。我的问题是该类包含使用CString引用的方法,例如: BOOL GetUnits(eSysOfUnits sysUnit, CString &Unit, Cstring &Format);_C#_C++_Mfc_Command Line Interface - Fatal编程技术网

C# 如何调用非托管C++;带有CString引用的DLL 我使用VS2010在非托管C++ DLL中构建一个C++/CLI包装器DLL,它在其公共接口中使用MFC cSnc++。非托管C++ DLL包含一个我需要访问的类。我的问题是该类包含使用CString引用的方法,例如: BOOL GetUnits(eSysOfUnits sysUnit, CString &Unit, Cstring &Format);

C# 如何调用非托管C++;带有CString引用的DLL 我使用VS2010在非托管C++ DLL中构建一个C++/CLI包装器DLL,它在其公共接口中使用MFC cSnc++。非托管C++ DLL包含一个我需要访问的类。我的问题是该类包含使用CString引用的方法,例如: BOOL GetUnits(eSysOfUnits sysUnit, CString &Unit, Cstring &Format);,c#,c++,mfc,command-line-interface,C#,C++,Mfc,Command Line Interface,在我的C++/CLI包装中,我尝试这样访问它 BOOL GetUmUnits(eSysU sysunit, String^ %cunit, String^ %format) { GetUnits(sysunit, marshal_as<CString>(cunit), marshal_as<CString>(format)); } BOOL GetUmUnits(eSysU系统单元,字符串^%cunit,字符串^%格式) { GetUnits(sysunit、ma

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

BOOL GetUmUnits(eSysU sysunit, String^ %cunit, String^ %format)
{
   GetUnits(sysunit, marshal_as<CString>(cunit), marshal_as<CString>(format));
}
BOOL GetUmUnits(eSysU系统单元,字符串^%cunit,字符串^%格式)
{
GetUnits(sysunit、marshal_as(cunit)、marshal_as(format));
}
这给了我一个编译器错误

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

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


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

您的包装器必须将托管的
字符串^
转换为实际的
CString
对象并直接传递它。封送员不知道如何创建
CString
对象


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

您的包装器必须将托管
字符串^
转换为实际的
CString
对象并直接传递它。封送员不知道如何创建
CString
对象


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

我实际上做了一个转换,所以CString cs(cuint)和safe for format,然后调用GetUnits(sysunit,cs,cs2),使用封送作为将其转换回字符串^。它起作用了。所以我想我回答了我自己的问题。但是我想知道它是否安全?我实际上做了一个转换,所以CString cs(cuint)和safe for format,然后调用GetUnits(sysunit,cs,cs2)将它转换回字符串^。它起作用了。所以我想我回答了我自己的问题。但是我想知道它是否安全?