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

3

大家好,我希望问一下Go Lang和C#方面的专家们:

早上好。 请问有人尝试过在Go程序中调用C# DLL函数(类库类型)吗?

我已经做了些初步的研究并看到了这些文章:

- https://github.com/golang/go/wiki/WindowsDLLs
- https://dev59.com/FIbca4cB1Zd3GeqPZrwO

但是这些是从C Win32实现创建的DLL。

我试图搜索将C# DLL加载到Go程序中,所有结果都会告诉你需要在Go程序中调用之前先拥有一个C++ / C(Win32)包装器。

此外,上面的链接将告诉您,Go希望采用“C”声明,我想这是__declspec类型或类似类型(例如WINAPI)。

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

期待您的启发性想法和输入 =)!

谢谢


2
https://github.com/matiasinsaurralde/go-dotnet - Gusman
你是想让对象可用还是只是特定的静态函数? 代码的访问模式是什么?它需要多频繁发生?您是否考虑使用.NET而不是Go?您可以将C#代码封装到EXE中,然后以这种方式使用它(您可以使用std in/out或其他通信来使用C#代码)。 - WiredPrairie
1
你好 @WiredPrairie,非常感谢你的建议。回答你的问题,我正在考虑访问对象,但如果不行就只使用普通函数。但我认为,由于它是C#,应该使用对象。我还不确定是否通过EXE公开它。因为这是一个转换/移植项目,所以不能仅使用纯C#。再次感谢你的帮助 =)! - Artanis Zeratul
1
如果要做这个,您将会产生相当大的开销,无论是在实现和构建复杂性方面还是在运行时方面。如果可能的话,我建议坚持使用一种语言,如果您想要这种类型的集成。 - WiredPrairie
C#代码不是机器码,而是托管代码,旨在由CLR(.NET VM)解释。没有好的方法可以直接从非CLR可执行文件与托管的CLR字节码进行接口交互。 - Adrian
1个回答

4

选项 1 将您的 .NET DLL 转换成 COM 组件,类似于 这样,然后按照第一个链接中的步骤从 golang 中调用它。请记住,此选项仅适用于 Windows。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接