gpt4 book ai didi

c# - 将 C# 字符串传递给 C++ dll 在发布版本中失败

转载 作者:行者123 更新时间:2023-11-28 02:53:42 25 4
gpt4 key购买 nike

我有一个具有简单功能的 C++ dll

#ifdef BUILDING_THE_DLL
#define EXPORTED __declspec(dllexport)
#else
#define EXPORTED __declspec(dllimport)
#endif
...
EXPORTED void AddSetting(char *key, char *value)

还有一个带有函数声明的 C# 项目:

[DllImport("pers.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void AddSetting(string key, string value);

在 Debug模式下构建 C# 项目时,一切都运行良好。在 Release build 中会触发异常:“尝试加载格式不正确的程序。”

有什么想法吗?

UPD:在 C# 项目中,平台目标在 Debug模式下设置为 x86,在 Release模式下设置为任何 CPU。我已经在 Release 中更改为 x86,这就是解决方案。非常感谢马特。

最佳答案

需要指定使用字符串的ansi格式,默认情况下。它是 unicode。应该是:

[DllImport("pers.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet::Ansi)]
public static extern void AddSetting(string key, string value);

此外,如果“AddSetting”函数修改了字符串,则需要在 C# 中使用 StringBuilder。请引用此 MSDN article了解详情。

关于c# - 将 C# 字符串传递给 C++ dll 在发布版本中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22481230/

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