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附加到字符串的末尾,我已消除了该问题。虽然我不确定这是否是设计。