【发布时间】:2012-04-26 16:37:34
【问题描述】:
使用 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 和 format 需要由非托管代码更新。
我做错了什么不可能吗?
【问题讨论】:
-
我实际上做了一个转换,所以 CString cs(cuint) 和安全格式然后调用 GetUnits(sysunit, cs, cs2) 这使用 marshal_as 将它转换回 String^。有用。所以我想我回答了我自己的问题。但我想知道它是否安全?
标签: c# c++ mfc command-line-interface