• 示例代码
package main // 这个文件一定要在main包下面import "C" // 这个 import 也是必须的,有了这个才能生成 .h 文件// 下面这一行不是注释,是导出为SO库的标准写法,注意 export前面不能有空格!!!
// 若没有此句,则不会生成对应的头文件(.h)//export hello
func hello(value string)*C.char { // 如果函数有返回值,则要将返回值转换为C语言对应的类型return C.CString("hello" + value)
}func main(){// 此处一定要有main函数,有main函数才能让cgo编译器去把包编译成C的库// main函数并不会调用
}
  • 编译生成dll
$ go build -buildmode=c-shared -o hello.dll hello.go
  • 生成对应的头文件
/* Code generated by cmd/cgo; DO NOT EDIT. *//* package command-line-arguments */#line 1 "cgo-builtin-export-prolog"#include <stddef.h> /* for ptrdiff_t below */#ifndef GO_CGO_EXPORT_PROLOGUE_H
#define GO_CGO_EXPORT_PROLOGUE_H#ifndef GO_CGO_GOSTRING_TYPEDEF
typedef struct { const char *p; ptrdiff_t n; } _GoString_;
#endif#endif/* Start of preamble from import "C" comments.  *//* End of preamble from import "C" comments.  *//* Start of boilerplate cgo prologue.  */
#line 1 "cgo-gcc-export-header-prolog"#ifndef GO_CGO_PROLOGUE_H
#define GO_CGO_PROLOGUE_Htypedef signed char GoInt8;
typedef unsigned char GoUint8;
typedef short GoInt16;
typedef unsigned short GoUint16;
typedef int GoInt32;
typedef unsigned int GoUint32;
typedef long long GoInt64;
typedef unsigned long long GoUint64;
typedef GoInt64 GoInt;
typedef GoUint64 GoUint;
typedef __SIZE_TYPE__ GoUintptr;
typedef float GoFloat32;
typedef double GoFloat64;
typedef float _Complex GoComplex64;
typedef double _Complex GoComplex128;/*static assertion to make sure the file is being used on architectureat least with matching size of GoInt.
*/
typedef char _check_for_64_bit_pointer_matching_GoInt[sizeof(void*)==64/8 ? 1:-1];#ifndef GO_CGO_GOSTRING_TYPEDEF
typedef _GoString_ GoString;
#endif
typedef void *GoMap;
typedef void *GoChan;
typedef struct { void *t; void *v; } GoInterface;
typedef struct { void *data; GoInt len; GoInt cap; } GoSlice;#endif/* End of boilerplate cgo prologue.  */#ifdef __cplusplus
extern "C" {#endifextern char* hello(GoString p0);#ifdef __cplusplus
}
#endif
  • Qt调用DLL测试
# 项目配置
QT += widgetsINCLUDEPATH += $$PWD/include
LIBS += -L$$PWD/bin -lhelloSOURCES += \main.cpp
// 测试代码
#include "hello.h"
#include <QApplication>
#include <QDebug>
#include <algorithm>using std::begin;
using std::end;int main( int argc, char *argv[] ) {QApplication app( argc, argv );char arr[] = " World";GoString str{ arr, end( arr ) - begin( arr ) };qDebug() << hello( str );return 0;
}

Golang创建DLL相关推荐

  1. 如何正确创建DLL和使用DLL

    如何正确创建DLL和使用DLL 本文将通过一个简单的实例来说明,如何正确的导出DLL中的类.对象.函数,并如何通过静态加载或动态加载的方式来使用DLL. 一.DLL中导出类.函数.对象 1. 创建一个 ...

  2. 在VS2015中用C++创建DLL并用C#调用且同时实现对DLL的调试

    from:http://m.blog.csdn.net/article/details?id=51075023 在VS2015中先创建C#项目,然后再创建要编写的动态库DLL项目,这样做的好处是整个解 ...

  3. VS2008创建dll,并使用dll

    原来一直使用vc6.0做开发,但是公司主要使用vs2008工具,刚开始使用的时候感觉非常不好用,但是一周下来,不禁感叹,还是新的好啊,嘿嘿! 这里总结一下vs2008下创建dll并使用dll导出函数的 ...

  4. VC创建DLL动态链接库及其调用

    1.1 创建dll项目 1.2 为dll项目编写源文件 头文件dllDemo.h extern "C" _declspec(dllexport) int Sum(int a,int ...

  5. vs2019创建dll以及使用

    vs2019创建dll以及使用 1.dll创建. 将会生成一个如下所示的文件 2. dll使用.方法一:新建项目,配置如下 其中包含目录为动态库.h所在的路径. 方法二:不使用包含目录,dll和lib ...

  6. 如何交换数据:10 分钟为 MQL5 创建 DLL

    事实上,很少有开发人员确切知道如何编写简单的 DLL 库,他们也不清楚绑定不同系统的特性. 通过多个示例,我将展示在 10 分钟内创建简单 DLL 的整个过程,并讨论我们绑定实施的一些技术细节.我们将 ...

  7. vc6创建dll文件的步骤_创建真正有用的产品支持页面的6步骤计划

    vc6创建dll文件的步骤 It'd be nice to think that your product UX is so exceptional that users won't ever nee ...

  8. 怎么创建dllwenjian_如何创建DLL文件

    动态链接库(DLL)是从C语言函数库和Pascal库单元的概念发展而来的.所有的C语言标准库函数都存放在某一函数库中.在链接应用程序的过程中,链接器从库文件中拷贝程序调用的函数代码,并把这些函数代码添 ...

  9. golang Linux桌面程序,舍弃Electron,使用HTML5 + Golang创建桌面应用程序

    Electron软件框架,允许使用JavaScript创建桌面GUI应用程序接口,并依赖于一个绑定的Chromium + Node.js运行时在大多数Linux桌面用户中名声不是很好,因为它的资源很重 ...

  10. EVC创建DLL及调用的基本方法

    记录下在EVC4中如何创建DLL的方法,供以后参考. WINCE下的DLL有4种:1.WINCE DLL 2.MFC Regular DLL 3.MFC Extension DLL 4. Resour ...

最新文章

  1. python网络编程例子
  2. interrupt分析
  3. mysql 触发器 分行_mysql 触发器
  4. 规格选择_止水螺杆规格及选择
  5. LeetCode MySQL 1322. 广告效果
  6. java编程实现素数环_结对编程(JAVA实现)
  7. bigdecimal 除法保留两位小数_【名师课堂】苏教数学五年级上总复习9.4小数的四则计算...
  8. websocket java 例子_java 实现websocket的两种方式实例详解
  9. 苹果手机时区改不了怎么办_苹果日期和时间怎么修改不了
  10. 从“判断力”到“创造力”:GAN 在图像生成上的应用
  11. 来,说说什么是运维人的情怀?
  12. vim全文替换字符串
  13. 安装win10 我们无法格式化所选分区的解决办法
  14. 文件服务器如何设置配额,文件服务器设置配额
  15. mysql 10106_mysql出现:Can’t create TCP/IP socket (10106) (#2004)
  16. 酷比魔方 iwork10旗舰版恢复出厂设置遇到的问题
  17. D435i+vins-Fusion+ego-planner+yolo无人机避障实测
  18. docker部署环境
  19. Unity中 高通ar打开摄像头
  20. 数据库实验六 触发器实验

热门文章

  1. 基于Springboot拦截器的AES报文解密
  2. 主板风扇转不开机是什么问题_电脑主板通电,风扇也转,怎么开不了机,显示屏也没反应...
  3. 开源工作流引擎 Workflow Core 的研究和使用教程
  4. mysql latch_MySQL8.0 - InnoDB里的Latch定义-阿里云开发者社区
  5. Google版 “AirDrop” 姗姗来迟,万能联播缘何超越Nearby Sharing?
  6. CF 3-6 2级组 D题 STRESSFUL TRAINING 紧张的比赛
  7. Educational Codeforces Round 61 (Rated for Div. 2) D. Stressful Training(贪心+二分+优先队列)
  8. **51 stm8 arduino esp8266 esp32 stm32 树莓派 等单片机使用对比**
  9. 计算机画图调整画笔粗细,【2人回答】画图里画笔怎么加粗-3D溜溜网
  10. CSS第三章:10.调整字体:字体加粗;(持续更新)