Delphi调用C++导出的QT类
打开VS2008创建一个dll项目(创建了一个QT Library项目),新建头文件q4dapplication.h定义纯虚类:
#ifndef Q4DAPPLICATION
#define Q4DAPPLICATION
class Q4DApplication
{
public:
virtual int exec() = 0;
};
#endif
新建头文件q4dapplicationimpl.h实现纯虚类:
#ifndef Q4DAPPLICATIONIMPL
#define Q4DAPPLICATIONIMPL
#include <QApplication>
#include "q4dapplication.h"
class Q4DApplicationImpl : public Q4DApplication, private QApplication
{
public:
Q4DApplicationImpl(int argc, char **argv);
~Q4DApplicationImpl();
int exec();
};
#endif
在VS项目自动生成的导出类的头文件中加入:
extern "C" __declspec(dllexport) Q4DApplication* NewQ4DApplication(int argc, char **argv);
在对应的.cpp文件中加入:
__declspec(dllexport) Q4DApplication* NewQ4DApplication(int argc, char **argv)
{
return new Q4DApplicationImpl(argc, argv);
}
编译出DLL给Delphi调用.
Delphi端导入单元如下:
unit ImptQTClass;
interface
uses SysUtils;
type
TQ4DApplication = class
public
function exec: Integer; virtual; cdecl; abstract;
end;
const QTDLL = 'Q4DLibrary.dll';
function NewQ4DApplication(AArgc: Integer; AArgv: PPChar): TQ4DApplication; cdecl;
implementation
function NewQ4DApplication; external QTDLL;
end.
测试代码:
var
oQApp: TQ4DApplication;
p: PChar;
i: Integer;
begin
p := '';
oQApp := NewQ4DApplication(0, @p);
i := oQApp.exec();
Assert(i = 1234);
本想尝试导出QT的GUI库给Delphi调用呢,发现QApplication创建后调用其他QWidget的Show方法有问题,估计和Delphi的Application对象冲突吧,失败了,以后在查找原因.不过感觉给Delphi导出GUI库没啥必要,纯属为了测试.可以将一些非界面相关的库导出来用,以后有空在继续吧.
http://blog.csdn.net/henreash/article/details/7353063
Delphi调用C++导出的QT类的更多相关文章
- C#调用C++导出类的一个实例
一直认为带导出类dll的只有VC自己可以调用,其它编程语言无法调用,今天看到一篇文章才知道自己错了.https://blog.csdn.net/huiyouyongdeyu2011/article/d ...
- 将封装了envi功能的IDL类导出成java类,方便java调用
目的: 用IDL将ENVI的功能封装成为IDL的类,并使用IDL的对象导出功能把这些功能类导出为java类,方便java调用.(本来想直接通过GP工具调用的,但是没有授权文件) 操作步骤: ...
- DLL导出函数和类的定义区别 __declspec(dllexport)
DLL导出函数和类的定义区别 __declspec(dllexport) 是有区别的, 请看 : //定义头文件的使用方,是导出还是导入 #if defined(_DLL_API) #ifndef D ...
- MVC NPOI Linq导出Excel通用类
之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...
- 【转】Delphi调用webservice总结
原文:http://www.cnblogs.com/zhangzhifeng/archive/2013/08/15/3259084.html Delphi调用C#写的webservice 用delph ...
- dll的概念 dll导出变量 函数 类
1. DLL的概念 DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数.变量或类.这些可以直接拿来使用. 静态链接库与动态链接库的区别: (1)静态链接 ...
- Delphi 调用netsh命令修改IP地址
Delphi 调用netsh命令修改IP地址 先介绍一下Netsh命令的使用方法: 在这里跟大家介绍几个简单的指令 1.Show IP 1.1Cmd Mode 直接在cmd下面输入 netsh int ...
- Win32下 Qt与Lua交互使用(四):在Lua脚本中自由执行Qt类中的函数
话接上篇.通过前几篇博客,我们实现在Lua脚本中执行Qt类中函数的方法,以及在Lua脚本中连接Qt对象的信号与槽. 但是,我们也能发现,如果希望在Lua脚本中执行Qt类的函数,就必须绑定一个真正实现功 ...
- Win32下 Qt与Lua交互使用(二):在Lua脚本中使用Qt类
话接上篇.成功配置好Qt+Lua+toLua后,我们可以实现在Lua脚本中使用各个Qt的类.直接看代码吧. #include "include/lua.hpp" #include ...
随机推荐
- 08-UIKit(UITableTableViewCell、自定义Cell、xcode调试)
目录: 1. UITableTableViewCell 2. tag技术 3. 自定义Cell 4. 用nib文件构造自定义的静态表 5. TableView数据模型总结 6. Xcode代码调试 & ...
- android之View的启动过程
转自:http://www.cdtarena.com/gpx/201308/9607.html 程序里调用了onSizeChanged方法进行了一些设置,不知道onSizeChanged是在什么时候启 ...
- Jquery学习笔记: attr和 prop的区别,以及为html标签自定义属性
一.自定义html标签属性 对于html文件中的html标签,可以自定义属性,如: <a href="#" id="link1" action=" ...
- perl 传递对象到模块
perl 中的对象 就是引用 通过new方法传递数据结构给各个模块 [root@wx03 test]# cat x1.pm package x1; use Data::Dumper; sub new ...
- 使用数组实现队列----《数据结构与算法分析---C语言描述》
一.h文件:my_que.h #ifndef _MY_QUE_H_ #define _MY_QUE_H_ struct QueRecord; typedef struct QueRecord* que ...
- CSS实现强制换行-------Day 78
事实上最早的时候也考虑过这个问题,当时还在想须要判定文字的长度么,实在是傻到极点了,原来CSS中本来就有这个样式设置的.而今天正好看到了有这么一篇介绍.细致看了下,感觉还不错,这里也把实验的结果记录下 ...
- Android imageView图片按比例缩放
android:scaleType可控制图片的缩放方式,示例代码如下: <ImageView android:id="@+id/img" android:src=" ...
- python进阶十_正則表達式(一)
近期状态一直不太好,至于原因,怎么说呢,不好说,总之就是纠结中覆盖着纠结,心思全然不在点上,希望能够借助Python的学习以及博客的撰写来调整回来,有的时候回头想一想,假设真的是我自己的问题呢,曾经我 ...
- 在TC(Total Commander)中添加启动Cygwin快捷键的方法
在TC(Total Commander)中添加启动Cygwin快捷键的方法 1.在Cygwin的安装目录下,增加文件tc-cygwin.bat(例如C:\cygwin-177\tc-cygwin.ba ...
- crm查询记录共享给了哪些人
有时候,我们须要查询一个记录.共享给了哪些人?怎么做? 第一种做法:是sql的方式 select * from PrincipalObjectAccess where objectid = '5226 ...