1. 編寫Go文件
注意刁绒,import "C"
需要系統(tǒng)中安裝gcc骑祟,否則會報錯:
exec: "gcc": executable file not found in %PATH%
export不能省略锋叨,否則C#語言無法找到入口
package main
import "fmt"
import "C"
func main() {
}
//PrintHello :
//export PrintHello
func PrintHello() {
fmt.Println("Hello From Golang")
}
//Sum :
//export Sum
func Sum(a, b int) int {
return a + b
}
完成之后,使用go命令導(dǎo)出DLL文件
go build --buildmode=c-shared -o main.dll main.go
執(zhí)行文件完成之后棱诱,會在目錄下生成main.dll 和 main.h 文件。
2. 編寫C#文件
using System;
using System.Runtime.InteropServices;
namespace CallGoDLL
{
class Program
{
[DllImport("main", EntryPoint = "PrintHello")]
extern static void PrintHello();
[DllImport("main", EntryPoint = "Sum")]
extern static int Sum(int a, int b);
static void Main(string[] args)
{
PrintHello();
int c = Sum(3, 5);
Console.WriteLine("Call Go Func to Add 3 and 5, result is " + c);
Console.ReadKey();
}
}
}
輸出結(jié)果:
Hello From Golang
Call Go Func to Add 3 and 5, result is 8
需要注意:
DLL放在對應(yīng)的文件夾下雕崩,目前是放置在Debug目錄下。
-
之前測試融撞,一直會報錯
System.BadImageFormatException:“試圖加載格式不正確的程序盼铁。
后來猜測原因可能是導(dǎo)出的DLL版本不對,如果GCC是64位的尝偎,最后生成的DLL也會是64位的饶火。
image.png
將目標(biāo)平臺強制設(shè)置成x64位即可。