我正在尝试使用 P/Invoke 从 C# 调用非托管 C++ DLL 中的函数。 C++ DLL 使用CString
'作为函数参数和返回值,例如
CString AFX_EXT_API GetUserName(CString& userID)
不幸的是,C++ 是遗留代码,我无法更改它以使用更通用的代码LPSTR
(甚至char *
).
有没有办法将 CString 编组为 .NET 兼容对象?或者以某种方式装饰 .NETchar[]
编组到 CString?
你不能创建一个CString
在托管代码中。显然,您需要在托管代码和本机代码之间添加一个额外的层。
这使您有机会制作位于两者之间的 C++/CLI DLL。您可以从托管程序集中调用此代码,而无需 P/invoke。从 C++/CLI 中间层您可以创建一个CString
.
不过,有一点需要注意。您必须使用与本机 DLL 相同的 C++ 运行时。这也许是可能的,但很可能会成为绊脚石。例如,如果 DLL 是使用 MSVC6 编写的,那么您也需要使用 MSVC6 构建中间层,这就排除了 C++/CLI。返回 P/invoke 并char*
在这种情况下。
我要强调的是,导出基于 DLL 的接口是很糟糕的做法CString
我正在寻找 DLL 的替代品。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)