1
我無法弄清楚我的代碼在這裏出了什麼問題。這用於從我的非託管C++代碼創建數組fontNames,然後使用C#進行檢索。 C#代碼只是輸出一個空字符串數組。 (這對我使用相同方法的其他整數數組不是問題)。非託管char *數組託管System ::字符串託管C++
請注意,exportFontNames輸出的fontnames數組在這裏可以在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的構造函數應該創建非託管字符數組的副本,因此刪除不應該影響它(並且刪除刪除沒有任何區別)。我很難過。
我有類似的問題在很久以前。 AFAIR您需要在跨越託管/非託管邊界時編組數據。請參閱http://msdn.microsoft.com/en-us/library/bb384865.aspx和http://msdn.microsoft.com/en-us/library/bb384859.aspx。 – Bazurbat 2012-04-06 08:50:04
使用調試器。 – Abyx 2012-04-06 10:22:58
Bazurbat,感謝您的建議,我試過了,但它沒有改變任何東西。 – penguinvasion 2012-04-06 11:12:47