所以在我的 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);
}
错误是:
对 PInvoke 函数“Download FTP Archive!Download_FTP_Archive.Program::GetUserPass”的调用导致堆栈不平衡。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配。
我应该在 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 );
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)