使用 CStringArray 调用本机 Dll
Posted
技术标签:
【中文标题】使用 CStringArray 调用本机 Dll【英文标题】:Native Dll Call with CStringArray 【发布时间】:2014-11-02 10:19:49 【问题描述】:考虑以下代码(可行!):
int SetInputFile( const CString& fileName );
int SetInputFile(System::String^ fileName)
const char* str = (char*)(void*)Marshal::StringToHGlobalAnsi(fileName);
return m_Native->SetInputFile(str);
如何使用此输入处理/转换案例?
int SetInputFiles( const CStringArray& fileNames );
【问题讨论】:
您不能从 C# 调用带有CStringArray
参数的方法。 C# 不知道CStringArray
是什么。重新设计本机方法,使其可从 C# 访问。
Alex Farber - 喜欢更改为 Const CString&[] 加上长度?
同样的错误 - CString
将不起作用。 C# 只能处理普通类型(如 int、char)、普通 C 样式字符串(如 char*、wchar_t*)、包含这些类型的数组和结构。不要尝试在互操作代码中使用 MFC 类型。
int SetInputFiles(wchar_t** strings, int size)
适用于本机互操作功能。 IntPtr 结构和 Marshal 类包含为此函数提供输入所需的所有内容。
我问是因为使用元帅转换将 CString& 作为单个对象工作...
【参考方案1】:
谢谢 Alex Farber 和 Nostromoo 在网上搜索后 - 我无法找到这样的转换。在那里,我将界面更改为接收带有分隔符的 const CString& 中的字符串列表。当然,您的建议也是好的和有效的解决方案。
【讨论】:
以上是关于使用 CStringArray 调用本机 Dll的主要内容,如果未能解决你的问题,请参考以下文章
CObject、CStringArray 和错误 C2248