1

ここで私のコードの何が問題になっているのか理解できません。これは、アンマネージC ++コードから配列fontNamesを作成するために使用され、C#で取得されます。C#コードは、空白の文字列の配列を出力するだけです。(これは、同じアプローチを使用する他のintの配列では問題になりません)。

ここで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のコンストラクターは、アンマネージ文字配列のコピーを作成する必要があるため、削除がそれに影響を与えることはありません(削除を削除しても違いはありません)。私は困惑しています。

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 に答える