Golang:调用Windows DLL函数

2024-01-07

我正在编写一个调用 Windows DLL 的 Go 应用程序。该 DLL 是用 MSVC 编写的,并使用 __declspec(dllexport) 进行外部“C”导出。

我的Go应用程序的顶部如下所示:

//#cgo CFLAGS: -IC:/Repos/Module/include
//#cgo LDFLAGS: -L. C:/Repos/Module/go/bin/MyModule.dll
//#include <MyModule.h>
import "C"

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

nRet := C.moduleImpl_len()

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

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 中定义的符号。

关于如何让符号链接而不必走系统调用路线有什么建议吗?


如果您尝试链接 dll,您需要/想要 LDFLAGS 中的“-lMyModule”吗?https://stackoverflow.com/a/15853231/32453 https://stackoverflow.com/a/15853231/32453

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Golang:调用Windows DLL函数 的相关文章

随机推荐