1、在Windows系统中,纯c语言编译的64位dll是通用的。但是由于各个编译器的c++处理的不同,c++编译出的dll不通用。
2、syscall只适用于c库的dll。c++库,要不采用cxx封装,要不自己用c语言包装出一个api再使用syscall调用。
3、golang调用c/c++库的方式有两种cgo或者syscall。在golang中,linux下的c++库,经过封装,不编译直接使用是允许的,但是在Windows中,由于cgo采用的是mingw编译,所以需要用mingw编译的库,而无法使用vs编译的c++库。
关于使用c语言包装api的方法:在函数声明时使用 extern “C”,并且一定要使用__declspec(dllexport)导出动态库。即extern "C" __declspec(dllexport) int __stdcall functionname();
。
当然还是更推荐大家使用cxx或者cxxwrap。
1 个赞