gpt4 book ai didi

c# - 如何从 C# 将 PWCHAR 传递给 C++ dll

转载 作者:搜寻专家 更新时间:2023-10-31 00:20:46 25 4
gpt4 key购买 nike

我有一个用 C++ 编写的 dll,我想从 C# 调用它。该函数输出outputChar和deadChar,deadChar变量也被C++函数读取。

我尝试以不同的方式从 C# 调用函数,但每次我都收到 AccessViolationException:“尝试读取或写入 protected 内存。这通常表明其他内存已损坏。”

C++ 动态链接库:

extern "C" _declspec (dllexport) int convertVirtualKeyToWChar(int virtualKey, PWCHAR outputChar, PWCHAR deadChar);

C#代码1:

[DllImport("keylib.dll")]
static extern int convertVirtualKeyToWChar(int virtualKey,
StringBuilder output,
StringBuilder deadchar);

C#代码2:

static extern int convertVirtualKeyToWChar(int virtualKey,
out char output,
ref char deadchar);

最佳答案

注意:函数 convertVirtualKeyToWChar 的两个 PWCHAR 参数不明确。它们可以是指向单个 WCHAR 的指针或指向 WCHAR 字符串的指针。给定函数和参数的名称,此答案假定它们是指向单个 WCHAR 的指针。

您想使用以下内容:

[DllImport("keylib.dll", CharSet=CharSet.Unicode, CallingConvention=CallingConvention.Cdecl)]
static extern int convertVirtualKeyToWChar( int virtualKey,
out char output,
ref char deadchar );

您的崩溃是由两个原因引起的:DllImport 默认为 ANSI 字符集和 StdCall 调用约定。您的 C++ DLL 未指定任何调用约定,因此它将默认为 CDecl。

参见 DllImportAttribute.CallingConventionDllImportAttribute.CharSet

关于c# - 如何从 C# 将 PWCHAR 传递给 C++ dll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5526570/

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