1
所以我試圖調用我的非託管C++ DLL中的函數。PInvoke在Windows Mobile平臺
void foo(char* in_file, char * out_file)
在我的C#應用程序,我宣佈了相同的功能,
[DllImport("dll.dll")]
public static extern void foo(byte[] in_file, byte[] out_file);
實際參數我通過一個ASCII編碼器,像這樣
byte[] param1 = Encoding.ASCII.GetBytes(filename1);
byte[] param2 = Encoding.ASCII.GetBytes(filename2);
foo(param1, param2);
一切正常,除了當長度param1是0或36或72個字符(字節)。然後出於某種原因,DLL報告接收到的長度爲1,38,73,並在最後顯示0x16字符。
我浪費了半天的時間試圖調試並理解爲什麼會發生這種情況。有任何想法嗎? 36的倍數有什麼意義?
編輯/解決方案:
後,我張貼這一個可能的答案讓我吃驚。通過在將字符串轉換爲字節數組之前將空字符0x0附加到字符串的末尾,我已消除了該問題。雖然我不確定這是否是設計。