我有一個用C++編寫的dll,我想從C#調用它。該函數輸出outputChar和deadChar,deadChar變量也由C++函數讀取。如何將PWCHAR傳遞到C++的C++ dll#
我試圖以不同的方式從C#中調用函數,但是所有的時間我都得到了AccessViolationException:「嘗試讀取或寫入受保護的內存,這通常表示其他內存已損壞。
C++ DLL:
extern "C" _declspec (dllexport) int convertVirtualKeyToWChar(int virtualKey, PWCHAR outputChar, PWCHAR deadChar);
C#代碼1:
[DllImport("keylib.dll")]
static extern int convertVirtualKeyToWChar(int virtualKey,
StringBuilder output,
StringBuilder deadchar);
C#代碼2:
static extern int convertVirtualKeyToWChar(int virtualKey,
out char output,
ref char deadchar);
從技術上說,字符集是編組如何處理字符串。無論CharSet如何,ref/out char都將編組爲wchar_t *。 – 2011-04-03 00:30:42
@peter CharSet設置確實會影響單個字符上的封送處理。我做了一個測試程序來驗證。如果我有一個C#'char'並將該值設置爲''\ x1042',則C++函數將接收與Unicode CharSet相同的值,但如果CharSet是Ansi或未指定,則爲\ x3F。 – 2011-04-03 01:08:59
你確實是對的。我認爲編組不會爲單個字符而煩惱,但它確實如此。 – 2011-04-03 01:59:51