十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
最近需要用到golang编译dll给C#调用,记录一下,希望可以给遇到的朋友一些帮助。
10余年的四川网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销的优势是能够根据用户设备显示端的尺寸不同,自动调整四川建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“四川网站设计”,“四川网站推广”以来,每个客户项目都认真落实执行。
开发环境:
1.windows7,VS2019,VScode
2.macOS,VScode
习惯在macos开发golang应用,先写好了dll,可以参考:
然后在windows7上面使用C#调用的时候出现不能识别dll,于是只好在windows7安装golang开发环境。
简单安装了VScode和mingw64.
测试时发现了一个问题,如下:
最后找到的原因是我的windows7是64位的,mingw也是64位的,需要在VS2019里面将目标平台设置如下:
当然,也可以将目标平台设置为x64的即可,我这样设置,系统就自己去适配了。
网上的大部分是说设置目标平台为x86,这个要根据具体情况而来,不能一概而论。好了,希望能帮到您。
在golang中加载dll并调用函数流程如下:
1.加载dll动态库到内存 syscall.LoadLibrary
2.获取函数地址 syscall.GetProcAddress
3.执行系统调用,传入参数 syscall.Syscall6
一个系统消息框函数的调用示例:
关键是 lpOnRecvCardEvent 这个函数的第二个参数是个 C++ 指针。 楼主在 C# 中声明这个导出函数时,使用了并不对应的 CardEvent[] C# 数组类型。 正确的做法是: 在 C# 声明 lpOnRecvCardEvent 时,第二个参数应该是 IntPtr ,不是数组。 由于楼...