gpt4 book ai didi

c# - 带有 char * 参数的 DLLImport。只有一个字符被传递

转载 作者:太空狗 更新时间:2023-10-29 23:47:05 24 4
gpt4 key购买 nike

我写了一个 C++ DLL,导出了下面的函数

extern "C" BOOL WINAPI SetUserPassword(const char* u, const char* p)

当从 C# 调用它时,我使用以下代码

[DllImport("mydll.dll")]
private static extern int SetUserPassword(String user, String password);

现在当 SetUserPassword 被调用时,我只得到每个参数的第一个字母。我做了一些谷歌搜索,发现 String 可能不是最好的使用方式,所以尝试使用 IntPtr 和 Marshal.StringToBSTR() 但这也不起作用。

这应该如何正确构建?如果需要,我可以修改 C++ DLL。

最佳答案

唯一有意义的是您的 C# 代码实际上是:

[DllImport("mydll.dll", CharSet = Unicode)]
private static extern int SetUserPassword(String user, String password);

当您这样做时,您将一个基于宽字符的字符串传递给您的 C++ 代码,并且由于它需要单字节字符,因此它将前两个字节字符的后半部分中的 0 字节解释为字符串终止符。

你应该写:

[DllImport("mydll.dll", CharSet = Ansi)]
private static extern int SetUserPassword(String user, String password);

或者事实上你可以完全按照你的问题来写,因为 Ansi 是默认的。


事实上,您使用的 CE 不支持 Ansi 字符集,因此唯一合理的解决方案是让您的 C++ 代码接受宽字符串。

关于c# - 带有 char * 参数的 DLLImport。只有一个字符被传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7283820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com