2017-06-09 5 views
0

Hallo Go Lang und C# Gurus,C# DLL (Klassenbibliothek) Funktionen von Go Sprache

Guten Tag. Ich möchte fragen, ob jemand von Ihnen versucht hat, eine C# DLL-Funktionen (Class Library-Typ) aus einem Go-Programm aufrufen?

Ich habe einige erste Forschung gemacht und sah diese Artikel:

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

Aber das ist DLLs von C Win32-Implementierungen erstellt werden. Ich habe versucht, nach C# DLL zu suchen, die in Go-Programm geladen wird, alle von ihnen werden Ihnen sagen, dass Sie einen C++/C (Win32) -Wrapper haben müssen, bevor Sie es auf einem Go-Programm aufrufen können.

Plus, die Links oben werden Ihnen sagen, dass Go erwartet eine "C" -Deklaration denke ich (die vom Typ __declspec) oder dergleichen (z. B. WINAPI).

Gibt es einen Weg in diesem Fall, wo wir den C/C++ - Wrapper komplett überspringen und die C# DLL-Funktionen in Go direkt aufrufen können?

Ihre aufschlussreichen Ideen und Eingaben werden sehr geschätzt =)!

Dank

+1

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

+0

Versuchen Sie, Objekte verfügbar zu machen oder nur bestimmte statische Funktionen? Was sind die Zugriffsmuster für den Code? Wie häufig muss es passieren? Könnten Sie in Erwägung ziehen, .NET anstelle von Go zu verwenden? Könnten Sie den C# -Code in eine EXE-Datei einfügen und sie einfach so verwenden (Sie könnten beispielsweise std in/out verwenden oder eine andere Kommunikation, um den C# -Code zu verwenden). – WiredPrairie

+0

Hallo @ WiredPrairie, vielen Dank für Ihre Eingaben. Um Ihre Frage zu beantworten, erwäge ich, auf Objekte zuzugreifen, aber wenn nicht wahrscheinlich nur einfache Funktionen. Aber ich denke, da es C# ist, sollte es Objekte sein. Ich bin mir nicht sicher, ob ich es durch EXE enthüllen soll. Ich kann es nicht nur in reinem C# haben, weil es ein Übergangs-/Portierungsprojekt ist. Nochmals vielen Dank =)! –

Antwort

2

Option 1 Ihre .NET-DLL in eine COM-Komponente wie this drehen, dann können Sie es von golang nach den Schritten in your first link aufrufen. Denken Sie daran, dass diese Option nur für Windows gilt.

Option 2 Umschließen Sie die DLL in einer einfachen C# -Konsolenanwendung, und rufen Sie die Anwendung in Golang mit os/exec auf. Ihr endgültiges Programm ist immer noch plattformübergreifend, wenn Ihre C# DLL plattformübergreifend ist.

Beide Optionen benötigen grundlegende Kenntnisse von C#, entweder Erstellen von COM-Komponenten oder Schreiben einer Konsolenanwendung zum Aufrufen der DLL. IMO Letzteres ist einfacher.

Verwandte Themen