2012-04-26 92 views
1

使用VS2010我正在围绕非托管C++ DLL在其公共接口中使用MFC CStrings构建C++/CLI包装器DLL。非托管C++ DLL包含我需要访问的类。我的问题是,这个类包含使用CString的引用,如方法:如何使用CString调用非托管C++ DLL参考

BOOL GetUnits(eSysOfUnits sysUnit, CString &Unit, Cstring &Format); 

在我的C++/CLI包装IM试图访问它像这样

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和格式需要由unmananaged代码更新。

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

+0

我实际上做了一个转换,以便CString cs(cuint)和格式安全,然后调用GetUnits(sysunit,cs,cs2),这会将其转换回使用marshal_as的字符串^。有用。所以我想我回答了我自己的问题。但即时通讯想知道它的安全吗? – user1304232 2012-04-26 17:52:49

回答

1

你的包装将不得不将转换为实际的CString对象并直接传递它。编组人员不知道如何创建CString对象。

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

+0

链接是相同的。 – user1304232 2012-04-26 17:49:48