美文网首页
C# 调用 Golang DLL

C# 调用 Golang DLL

作者: Wenchao | 来源:发表于2019-03-17 17:28 被阅读0次

    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 文件。

    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位的。

      image.png
      将目标平台强制设置成x64位即可。

    相关文章

      网友评论

          本文标题:C# 调用 Golang DLL

          本文链接:https://www.haomeiwen.com/subject/uivumqtx.html