【问题标题】:Golang: call Windows DLL functionsGolang:调用 Windows DLL 函数
【发布时间】:2015-01-31 08:06:35
【问题描述】:

我正在编写一个调用 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 中定义的符号。

关于如何让符号链接而不必走系统调用路线的任何建议?

【问题讨论】:

  • 这是我在创建问题时的拼写错误。我的代码是正确的(一个冒号)。现在在问题文本中更正了。
  • 这是正确答案。你为什么不把它放在一个答案中,我会给你信用。谢谢!

标签: c++ windows dll go


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多