从 Go 语言调用的 C# DLL(类库)函数

标签 c# go dll

你好 Go Lang 和 C# 专家,

美好的一天。 我想问问你们有没有人试过从 Go 程序调用 C# DLL 函数(类库类型)?

我做了一些初步研究并看到了这些文章:

- https://github.com/golang/go/wiki/WindowsDLLs
- https://stackoverflow.com/questions/27849137/golang-call-windows-dll-functions

但这些是从 C Win32 实现创建的 DLL。 我试着搜索加载到 Go 程序中的 C# DLL,所有这些都会告诉你,你需要有一个 C++/C (Win32) 包装器,然后才能在 Go 程序上调用它。

此外,上面的链接会告诉您 Go 期待一个我认为的“C”声明(属于 __declspec 类型)或类似的声明(例如 WINAPI)。

在这种情况下,有没有一种方法可以完全跳过 C/C++ 包装器,直接在 Go 中调用 C# DLL 函数?

我们将不胜感激您富有启发性的想法和意见 =)!

谢谢

最佳答案

选项 1 将您的 .NET DLL 转换为 COM 组件,如 this ,然后您可以按照 your first link 中的步骤从 golang 调用它.请记住,此选项仅适用于 Windows。

选项 2 将 DLL 包装在一个简单的 C# 控制台应用程序中,并使用 os/exec 在 golang 中调用该应用程序.如果您的 C# DLL 是跨平台的,您的最终程序仍然是跨平台的。

这两个选项都需要 C# 的基本知识,或者创建 COM 组件,或者编写控制台应用程序来调用 DLL。 IMO 后者更容易。

关于从 Go 语言调用的 C# DLL(类库)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44447318/

相关文章:

c# - WPF-单击ListView后设置焦点

c# - 疯狂 VS 设计器错误

tcp - 允许 golang 通过 Windows 防火墙进行测试

delphi - 接口(interface)版本控制

c# - JSON.NET 阅读器问题

c# - 以下是线程安全的吗?

sockets - go net/http unix域套接字连接

apache - Golang API 的 HTTPS

python 使用 ctypes 处理 dll - 结构 OUT 参数

c# - 如何自动将版本号插入 AssemblyName