go语言如何生成dll go语言入门教程

golang编译dll给C#调用

最近需要用到golang编译dll给C#调用,记录一下,希望可以给遇到的朋友一些帮助。

站在用户的角度思考问题,与客户深入沟通,找到昌江网站设计与昌江网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站建设、做网站、企业官网、英文网站、手机端网站、网站推广、域名与空间、虚拟空间、企业邮箱。业务覆盖昌江地区。

开发环境:

1.windows7,VS2019,VScode

2.macOS,VScode

习惯在macos开发golang应用,先写好了dll,可以参考:

然后在windows7上面使用C#调用的时候出现不能识别dll,于是只好在windows7安装golang开发环境。

简单安装了VScode和mingw64.

测试时发现了一个问题,如下:

最后找到的原因是我的windows7是64位的,mingw也是64位的,需要在VS2019里面将目标平台设置如下:

当然,也可以将目标平台设置为x64的即可,我这样设置,系统就自己去适配了。

网上的大部分是说设置目标平台为x86,这个要根据具体情况而来,不能一概而论。好了,希望能帮到您。

如何编译生成dll

使用VC下的cl和link手工创建dll并实现函数导入

1、创建dll头文件:

/*

* dllmain.h

*/

#ifndef _DLLMAIN_H

#define _DLLMAIN_H

int getNumber();

#endif

2、创建dll源文件:

/*

* dllmain.c

*/

#include "dllmain.h"

int getNumber()

{

return 10;

}

3、 创建def文件:

; export.def

LIBRARY MY_DLLMAIN ; MY_DLLMAIN 将成为生成的dll的名称

EXPORTS

getNumber @1 ; 这个名称即为函数的实际导出名称 @1为函数的导出编号

4、生成dll文件:

cl dllmain.c /c

link /def:export.def /dll dllmain.obj

这时,工程中已经包含了 dllmain.h dllmain.c export.def dllmain.obj dllmain.lib dllmain.exp MY_DLLMAIN.dll 其中,后4个文件是编译链接过程中生成的文件

5、创建dlltest.c:

/*

* dlltest.c

*/

#include stdio.h

#include "dllmain.h" //dll库的头文件

#pragma comment(lib,"dllmain.lib") //dllmain.lib即是上一步生成的文件

int main()

{

printf("%dn",getNumber());

}

6、编译、链接dlltest.c

cl dlltest.c /c

link dlltest.obj

注意:这里dllmain.lib和dllmain.h应该和dlltest.c在同一个目录中。此步的结果将生成 dlltest.exe

7、运行:

dlltest

这时,系统将载入my_dllmain.dll这个动态链接库,将调用其中的getNubmer函数。

C# 调用 Golang DLL

注意, import "C" 需要系统中安装gcc,否则会报错:

完成之后,使用go命令导出DLL文件

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

输出结果:

需要注意:


网站栏目:go语言如何生成dll go语言入门教程
本文网址:http://myzitong.com/article/hppgde.html