Go cgo 调用C++的DLL,但是DLL返回的是一个对象指针,能否用Go调用这个指针对象的方法?求大神指点

1)swift,貌似官网的推荐

我使用后者,用起来比较爽,上代码

}

转战简书,来点干货,认真的码农必须讲清楚

最近使用golang调用c++的dll库文件,简单了解了一下,特作此笔记:

一、DLL 的编制与具体的编程语言及编译器无关

Com组件dll:不管是何种语言写的都可以调用,但com分很多种。比如php只能调用com的dll的特定的几种、不能直接调用动态dll,要使用第三方的dll文件dynwrap.dll或者编译PHP扩展来迂回调用

二、动态dll文件里面需要被其他程序访问的函数必须导出,有2种方法(c++,其他语言不清楚)

先简单来个dll的源文件,就一个add函数,如下:

说明:此方式下,如果调用该dll的是一个c++程序(同一个编译器的版本)是没有问题的。但是如果是一个其它语言的程序(如C#、VB),则会出错

因为VC++编译器对于__declspec(dllexport)声明的函数会进行名称转换,如上面的函数会转换为Add@0,这样你在VB中必须这样声明:

@后面的数由于参数类型不同而可能不同。这显然不太方便。

为了解决这一问题,我们往往在函数前面再加一个extern "C",使用C方式的函数命名规则。所以为了大范围的使用我们基本申明都如下:

2.2、使用.def文件,为了简化2.1的那一长串代码,MS引入了def文件方便我们操作。

add @ 1;导出其中的add函数,并指定add函数的序号为1

添加文件到项目属性里面的Linker/input里面

三、在golang里面使用动态dll,也有3种方法

注意的是golang由于数据类型和c++的不一致,在需要传参的时候需要把所有的参数都转换成

}

我要回帖

更多关于 易语言调用外部dll 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信