如何解决,在arm64设备上,使用x64的c#调用由go代码生成的x64的dll

hao yun 0 信誉分
2024-04-24T04:58:17.65+00:00

在arm64设备上,使用x64的c#调用由go代码生成的x64的dllC程序会异常,相同dll,使用x64的c++代码调用就没有问题,这是为什么?

C#
C#
一种面向对象的类型安全的编程语言,它起源于 C 语言系列,包括对面向组件的编程的支持。
188 个问题
0 个注释 无注释
{count} 票

1 个答案

排序依据: 非常有帮助
  1. Jiale Xue - MSFT 46,556 信誉分 Microsoft 供应商
    2024-04-24T09:10:30.33+00:00

    在C#中调用C函数时,使用的是标准的Platform Invocation Services (P/Invoke)机制,它依赖于Windows的stdcall调用约定。而在Go语言中,默认使用的是cdecl调用约定。

    C# P/Invoke默认使用stdcall调用约定,这与C++中的__cdecl不同,所以你在Go代码中编译的DLL使用的是__cdecl调用约定,这可能会导致调用时的不兼容性。

    你可以尝试在Go代码中明确指定使用stdcall调用约定。


    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。

    注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。


你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。