1

我无法弄清楚我的代码有什么问题。这用于从我的非托管 C++ 代码创建数组 fontNames,然后在 C# 中检索该数组。C# 代码只输出一个空白字符串数组。(这对于我使用相同方法的其他整数数组来说不是问题)。

请注意此处 exportFontNames 输出的字体名称数组在 C++ 中工作正常(打印正常)。

unsigned int fontNamesCount = 0;
const char ** unmanagedFontNames = o.exportFontNames(fontNamesCount);
array<String^>^ fontNames = gcnew array<String^>(fontNamesCount);
for (unsigned int i = 0; i < fontNamesCount; i++)
{
    fontNames[i] = gcnew String(unmanagedFontNames[i]);
    delete [] unmanagedFontNames[i];
}
delete [] unmanagedFontNames;

任何人都可以看到结果字符串数组不包含任何内容的原因吗?据我了解, gcnew String 的构造函数应该复制非托管 char 数组,因此删除不应该影响它(删除删除没有区别)。我难住了。

4

1 回答 1

0

尝试在循环中执行此操作:

fontNames[i] = marshal_as<String^>(unmanagedFontNames[i]);

您还需要一些指令:

#include <msclr/marshal.h>
using namespace msclr::interop;
于 2012-07-31T05:58:34.340 回答