gpt4 book ai didi

c# - .Net c# char * 编码

转载 作者:行者123 更新时间:2023-11-30 14:35:19 25 4
gpt4 key购买 nike

我正在尝试使用 System.Runtime.InteropServices 从 C# 应用程序调用现有的 C dll,但在匹配 PInvoke 函数和 Target 函数之间的签名时遇到困难。

目标函数是

__declspec(dllexport) DWORD GetSomeString(char* strOut);

我的 PInvoke 函数是

[DllImport("Existing.dll")]
public static extern uint GetSomeString([MarshalAs(UnmanagedType.LPWStr)]
string strDisplay);

调用函数

string tempStr = "My Output String";
uint retVal = GetSomeString(tempStr);

但是我收到消息了

Managed Debugging Assistant 'PInvokeStackImbalance' has detected a problem... ...A call to PInvoke function 'GetSomeString' 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.

我还尝试将 PInvoke 函数实现为

[DllImport("Existing.dll")]
public static extern uint GetSomeString([MarshalAs(UnmanagedType.LPWStr)]
StringBuilder strDisplay);

但是没有用。

有没有人知道我可能做错了什么?

如果需要更多信息或我的问题不清楚,请告诉我。

提前致谢。

最佳答案

您需要指定 calling convention .默认情况下,PInvoke 使用 StdCall,但您的方法(可能)是 Cdecl

[DllImport("Existing.dll", CallingConvention=CallingConvention.Cdecl)]

关于c# - .Net c# char * 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12322572/

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