完成之后,使用go命令导出DLL文件
执行文件完成之后,会在目录下生成main.dll 和 main.h 文件。
输出结果:
需要注意:
最近需要用到golang编译dll给C#调用,记录一下,希望可以给遇到的朋友一些帮助。开发环境:
1.windows7,VS2019,VScode
2.macOS,VScode
习惯在macos开发golang应用,先写好了dll,可以参考:
https://blog.csdn.net/henreash/article/details/88768206
然后在windows7上面使用C#调用的时候出现不能识别dll,于是只好在windows7安装golang开发环境。
简单安装了VScode和mingw64.
https://sourceforge.net/projects/mingw-w64/
测试时发现了一个问题,如下:
最后找到的原因是我的windows7是64位的,mingw也是64位的,需要在VS2019里面将目标平台设置如下:
当然,也可以将目标平台设置为x64的即可,我这样设置,系统就自己去适配了。
网上的大部分是说设置目标平台为x86,这个要根据具体情况而来,不能一概而论。好了,希望能帮到您。
使用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函数。