Chr*_*ris 2 c# c++ string dllimport char
我编写了一个C++ DLL,导出了以下函数
extern "C" BOOL WINAPI SetUserPassword(const char* u, const char* p)
Run Code Online (Sandbox Code Playgroud)
从C#调用它时,我使用以下代码
[DllImport("mydll.dll")]
private static extern int SetUserPassword(String user, String password);
Run Code Online (Sandbox Code Playgroud)
现在,当SetUserPassword我被调用时,我只得到每个参数的第一个字母.我做了一些谷歌搜索,发现String可能不是最好使用,所以尝试使用IntPtr,Marshal.StringToBSTR()但这也没有用.
如何正确构建?如果需要,我可以修改C ++ DLL.
唯一有意义的是你的C#代码实际上是:
[DllImport("mydll.dll", CharSet = Unicode)]
private static extern int SetUserPassword(String user, String password);
Run Code Online (Sandbox Code Playgroud)
执行此操作时,将基于宽字符的字符串传递给C++代码,并且因为它需要单字节字符,所以它将前两个字节字符的后半部分中的0字节解释为字符串终止符.
你应该写:
[DllImport("mydll.dll", CharSet = Ansi)]
private static extern int SetUserPassword(String user, String password);
Run Code Online (Sandbox Code Playgroud)
或者实际上你可以像在你的问题中那样写它,因为Ansi它是默认的.
事实上,事实证明你在CE上不支持Ansi字符集,因此唯一合理的解决方案是让你的C++代码接受宽字符串.
| 归档时间: |
|
| 查看次数: |
4464 次 |
| 最近记录: |