gpt4 book ai didi

c# - 在 C# 中使用 C++ 引用中的引用从 C# 错误调用 C++ 代码

转载 作者:太空狗 更新时间:2023-10-29 21:26:43 25 4
gpt4 key购买 nike

所以在我的 c++.dll 文件中我得到了以下函数:

    DLL void GetUserPass(char* &userName, char* &passWord)
{
userName = "ceva";
passWord = "altceva";
}

现在我想从 C# 中调用它,但它给了我一个错误:

[DllImport("myDLL.dll")]
private static extern void GetUserPass(ref string userName, ref string passWord);

static void f()
{
string userName ="";
string passWord ="";

GetUserPass(ref userName, ref passWord);
}

错误是:

A call to PInvoke function 'Download FTP Archive!Download_FTP_Archive.Program::GetUserPass' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.

我是否应该在 C++ dll 文件中尝试类似这样的内容:

using std::string;
DLL void GetUserPass(string &userName, string &passWord)
{
userName = "ceva";
passWord = "altceva";
}

最佳答案

尝试以下操作:

DLL void __stdcall GetUserPass(char* &userName, char* &passWord)
{
userName = "ceva";
passWord = "altceva";
}



[DllImport("myDLL.dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]
private static extern void GetUserPass(ref IntPtr userName, ref IntPtr passWord);
static void f()
{
IntPtr userNamePtr = new IntPtr();
IntPtr passWordPtr = new IntPtr();
GetUserPass(ref userNamePtr, ref passWordPtr);
string userName = Marshal.PtrToStringAnsi( userNamePtr );
string passWord = Marshal.PtrToStringAnsi( passWordPtr );
}

关于c# - 在 C# 中使用 C++ 引用中的引用从 C# 错误调用 C++ 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10681887/

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