1
내 코드 여기에 무슨 문제가 있는지 확인할 수 없습니다. 이것은 내 관리되지 않는 C++ 코드에서 배열 fontNames를 만드는 데 사용되며,이 코드는 C#에서 검색됩니다. C# 코드는 단순히 빈 문자열 배열을 출력합니다. (이것은 동일한 접근법을 사용하는 다른 int 배열에 대해서는 문제가되지 않습니다.)관리되지 않는 char * 배열 관리되는 System :: String 관리되는 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 생성자는 관리되지 않는 char 배열의 복사본을 만들어야하므로 삭제가 영향을 미치지 않아야하며 삭제를 제거하면 아무런 차이가 없습니다. 나는 혼란 스럽다. 대신 루프에서이 일을
나는 오래 전에 비슷한 문제 했어. AFAIR 관리되는/관리되지 않는 경계를 넘을 때 데이터를 마샬링해야합니다. http://msdn.microsoft.com/en-us/library/bb384865.aspx 및 http://msdn.microsoft.com/en-us/library/bb384859.aspx를 참조하십시오. – Bazurbat
디버거를 사용하십시오. – Abyx
Bazurbat, 제안 주셔서 감사합니다, 나는 그것을 시도했지만 아무것도 바뀌지 않았다. – penguinvasion