英文:
Share .Net libraries with GO
问题
我正在寻找一种方法来编写一个使用.NET UI的GO应用程序,或者反过来,一个调用GO库的.NET应用程序。
有没有办法在GO中进行P'Invoke,或者从GO中进行".Net'Invoke"?
如果没有,最好的性能替代方案是什么?我目前想到的最好的主意是使用RPC。
英文:
I'm looking for a way to write a GO application that use a .NET UI. Or the other way around, a .Net application that calls into a GO library.
Is there anyway to P'Invoke GO, or ".Net'Invoke" from GO?
If not, what is the best performing alternative? The best idea I have right now is RPC.
答案1
得分: 2
可以在进程内托管.NET CLR。理论上,你可以编写一个可从C调用的DLL,该DLL可以托管CLR。
例如,这个示例项目演示了在C++应用程序内创建CLR。
如果将所需的状态(例如ICLRRuntimeInfo
等)捆绑到一个结构体中,你应该能够从用C编写的DLL中调用相应的函数,并返回一个“句柄”或其他包装器给你的Go应用程序。
从文档中并不完全清楚的是:
-
在另一个进程中加载的程序集是否可以执行这些调用(与进程本身相比)
-
是否必须使用C++而不是C(似乎不是必须的,但我没有尝试过上述操作,并且在一些示例代码中有一些“可疑”的声明,涉及到纯C)
英文:
It is possible to host a .NET CLR in-process. You could in theory write a DLL callable from C, which could host such a CLR.
e.g. This example project demonstrates creating a CLR inside of a C++ application.
If you bundle together the required state (e.g. ICLRRuntimeInfo
et al.) into a struct, you should be able to call the equivalents from a DLL written in C, and return a 'handle' or some such other wrapper to your Go application.
What is not entirely clear from the documentation is
- Whether it's legal for an assembly loaded in another process to perform these calls (vs. the process itself)
- Whether C++ is mandatory instead of C (doesn't seem to be the case, but I have not attempted the above and there are some 'suspicious' declarations in some of the example code w.r.t vanilla C)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论