2017-06-09 17 views
0

Hello Go LangとC#gurusGo言語から呼び出されるC#DLL(クラスライブラリ)関数

良い日。 誰かが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を検索しようとしましたが、Goプログラムで呼び出す前にC++/C(Win32)ラッパーが必要であることを伝えます。

さらに、上記のリンクはGoが「__declspecタイプの」宣言(たとえば、WINAPIなど)を期待していることを伝えます。

このケースでは、C/C++ラッパーを完全にスキップし、GoのC#DLL関数を直接呼び出す方法はありますか?

あなたの啓発のアイデアとインプットは非常に高く評価されます。

+1

https://github.com/matiasinsaurralde/go-dotnet – Gusman

+0

オブジェクトを使用可能にするか、特定の静的機能のみを使用しようとしていますか? コードのアクセスパターンは何ですか?どのくらい頻繁に起こる必要がありますか? Goの代わりに.NETを使用することを検討できますか? C#コードをEXEにラップして、そのまま使用することができます(C#コードを使用するためにstd in/outを使用するか、他の通信を使用することができます)。 – WiredPrairie

+0

こんにちは@WiredPrairie、あなたの入力のために多くの感謝。あなたの質問に答えるために、私はオブジェクトにアクセスすることを考えていますが、おそらく単純な機能ではありません。しかし、私は、そのC#以来、それはオブジェクトでなければならないと思う。私はまだEXEで公開しているかどうかはわかりません。移行/移植プロジェクトであるため、純粋なC#のみではできません。再度ありがとう=)! –

答えて

2

おかげでオプション1は、あなたがyour first linkの手順に従ってgolangからそれを呼び出すことができ、thisのようなCOMコンポーネントにあなたの.NET DLLを回します。このオプションは、ウィンドウのみのためのものです。

オプション2ラップ単純なC#コンソールアプリケーション内のDLL、およびos/execを用いgolangでアプリケーションを起動します。 C#DLLがクロスプラットフォームである場合、最終的なプログラムはクロスプラットフォームです。

両方のオプションには、COMコンポーネントの作成、またはDLLを呼び出すためのコンソールアプリケーションの作成に関するC#の基本的な知識が必要です。 IMO後者は簡単です。

関連する問題