C# 調(diào)用 Golang DLL

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命令導出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();
        }
    }
}

輸出結果:

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位即可。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容