我将给出一个完整的示例来说明如何调用C++ DLL文件。首先,我们将创建一个简单的C++ DLL,然后编写Go代码来调用该DLL。

  1. 创建C++ DLL文件(example.cpp):
#include extern "C" {__declspec(dllexport) void HelloWorld() {std::cout << "Hello from C++ DLL!" << std::endl;}}
  1. 编译C++代码为DLL文件:

使用MinGW编译器编译 example.cpp 文件,生成 example.dll 文件。

-Wl,–out-implib,libexample.a -Wl,–output-def,example.def

其中,这段话不是必须的

g++ -shared -o example.dll example.cpp 
g++ -shared -o example.dll example.cpp -Wl,--out-implib,libexample.a -Wl,--output-def,example.def
  1. .def 文件生成 .h 头文件:
pexports example.dll > example.def

这将生成 example.def 文件。您可以手动将函数声明复制到一个新的头文件 example.h 中。
只要方法名HelloWorld是正确的,第三步的pexports就不是必须的

// example.h#ifndef EXAMPLE_H#define EXAMPLE_H#ifdef __cplusplusextern "C" {#endifvoid HelloWorld();#ifdef __cplusplus}#endif#endif // EXAMPLE_H
  1. 编写Go代码调用DLL文件:

创建一个名为 main.go 的Go文件。

package main// #include "example.h"// #cgo LDFLAGS: -L. -lexampleimport "C"func main() {// 调用C++ DLL中的函数C.HelloWorld()}
  1. 编译Go代码:

在命令行中执行以下命令,将Go代码编译成可执行文件。

go build -o main main.go
  1. 运行生成的可执行文件:
./main

运行后,应该会看到输出 “Hello from C++ DLL!”。

这就完成了使用Go调用C++ DLL的整个过程。