C# 调用 Golang DLL

Wenchao · · 3306 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:Wenchao

查看原文:C# 调用 Golang DLL

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3306 次点击  
加入收藏 微博
1 回复  |  直到 2019-03-17 20:46:21
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传