您现在的位置是:网站首页> Go语言

C# 调用 Golang DLL

摘要
C# 调用 Golang DLL
1. 编写Go文件
注意,import "C" 需要系统中安装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命令导出DLL文件
go build --buildmode=c-shared -o main.dll main.go

执行文件完成之后,会在目录下生成main.dll 和 main.h 文件。

godll.png

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();        }    } }
输出结果:
Hello From Golang Call Go Func to Add 3 and 5, result is 8
需要注意:
  1. DLL放在对应的文件夹下,目前是放置在Debug目录下。
  2. 之前测试,一直会报错
System.BadImageFormatException:“试图加载格式不正确的程序。
后来猜测原因可能是导出的DLL版本不对,如果GCC是64位的,最后生成的DLL也会是64位的。
vcdll.png
将目标平台强制设置成x64位即可。


Top