首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Golang:调用Windows函数

Golang:调用Windows函数
EN

Stack Overflow用户
提问于 2015-01-08 20:41:31
回答 2查看 4.8K关注 0票数 3

我正在编写一个Go应用程序,它调用一个Windows。DLL是用MSVC编写的,并使用__declspec(dllexport)导出"C“。

我的围棋应用程序的顶部如下:

代码语言:javascript
复制
//#cgo CFLAGS: -IC:/Repos/Module/include
//#cgo LDFLAGS: -L. C:/Repos/Module/go/bin/MyModule.dll
//#include <MyModule.h>
import "C"

我从模块调用函数,如下所示:

代码语言:javascript
复制
nRet := C.moduleImpl_len()

问题是,当我尝试运行这个应用程序时,我会得到以下错误:

代码语言:javascript
复制
C:\Users\MINDO~1\AppData\Local\Temp\go-build836751819\mod\modimpl\_obj\modimpl.cgo2.o: In function `_cgo_e2aaf076ab69_Cfunc_moduleImpl_len':
C:/Repos/Module/go/src/mod/modimpl/modimpl.go:90: undefined reference to `moduleImpl_len'

我用DUMPBIN查看了DLL导出的符号,它准确地显示了"moduleImpl_len“作为导出的符号。这也是MyModule.h中定义的符号。

有什么建议,我可以让符号链接,而不必走syscall的路线?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-31 00:06:35

如果您试图链接到dll,则需要/希望在LDFLAGS?https://stackoverflow.com/a/15853231/32453中使用"-lMyModule“。

票数 2
EN

Stack Overflow用户

发布于 2022-11-05 00:22:30

上面的链接将在编译时链接DLL,这在某些情况下是可取的.

为了在运行时进行链接,需要使用syscall包。我需要在Windows和这是我发现的第一个简单快捷的例子。上这样做,以帮助我第一次尝试这样做

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27849137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档