我将给出一个完整的示例来说明如何调用C++ DLL文件。首先,我们将创建一个简单的C++ DLL,然后编写Go代码来调用该DLL。
- 创建C++ DLL文件(
example.cpp
):
#include extern "C" {__declspec(dllexport) void HelloWorld() {std::cout << "Hello from C++ DLL!" << std::endl;}}
- 编译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
- 从
.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
- 编写Go代码调用DLL文件:
创建一个名为 main.go
的Go文件。
package main// #include "example.h"// #cgo LDFLAGS: -L. -lexampleimport "C"func main() {// 调用C++ DLL中的函数C.HelloWorld()}
- 编译Go代码:
在命令行中执行以下命令,将Go代码编译成可执行文件。
go build -o main main.go
- 运行生成的可执行文件:
./main
运行后,应该会看到输出 “Hello from C++ DLL!”。
这就完成了使用Go调用C++ DLL的整个过程。