1
我有一個C++函數,用一個char *緩衝區調用以用於輸出。現在我想用C#寫信給它,所以我需要從C++函數調用託管方法。我無法弄清楚的是如何將它作爲StringBuilder傳遞。將char *緩衝區作爲StringBuilder傳遞給C#
我以前使用Robert Giesecke's Unmanaged Exports哪些工作正常,並使用默認字符串編組方案自動執行此操作,但是我想爲StringBuilder的MaxCapacity使用size參數。
有沒有比創建一個新的StringBuilder實例,寫入它,得到一個CLR字符串ToString()
,然後將內容複製到緩衝區更好的方法嗎?有問題的字符串可能只有10,000個字符,我不太喜歡每次複製兩次的想法。
C#
public static void MyMethod(StringBuilder buffer)
{
//...
}
C++/CLI
extern "C" __declspec(dllexport)
void __stdcall MyFunction(char* buffer, int length)
{
MyNamespace::MyClass::MyMethod(/* ? */);
}
你必須將它複製* *無論如何,因爲.NET串由16 bit寬字符,你的函數使用8位'char'。你*有*在某些時刻將其轉換爲8位。 –