使用 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 FarberNostromoo 在网上搜索后 - 我无法找到这样的转换。在那里,我将界面更改为接收带有分隔符的 const CString& 中的字符串列表。当然,您的建议也是好的和有效的解决方案。

【讨论】:

以上是关于使用 CStringArray 调用本机 Dll的主要内容,如果未能解决你的问题,请参考以下文章

CStringArray

CObject、CStringArray 和错误 C2248

将字符串方程转换为 CStringarray - MFC

C26451 算术溢出访问 CStringArray 中的项目

在调试器上一一显示 CStringArray 中的元素?

在 CStringArray 的 5 个元素中选择 3 个元素?