打开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类的更多相关文章

  1. C#调用C++导出类的一个实例

    一直认为带导出类dll的只有VC自己可以调用,其它编程语言无法调用,今天看到一篇文章才知道自己错了.https://blog.csdn.net/huiyouyongdeyu2011/article/d ...

  2. 将封装了envi功能的IDL类导出成java类,方便java调用

    目的:     用IDL将ENVI的功能封装成为IDL的类,并使用IDL的对象导出功能把这些功能类导出为java类,方便java调用.(本来想直接通过GP工具调用的,但是没有授权文件)   操作步骤: ...

  3. DLL导出函数和类的定义区别 __declspec(dllexport)

    DLL导出函数和类的定义区别 __declspec(dllexport) 是有区别的, 请看 : //定义头文件的使用方,是导出还是导入 #if defined(_DLL_API) #ifndef D ...

  4. MVC NPOI Linq导出Excel通用类

    之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...

  5. 【转】Delphi调用webservice总结

    原文:http://www.cnblogs.com/zhangzhifeng/archive/2013/08/15/3259084.html Delphi调用C#写的webservice 用delph ...

  6. dll的概念 dll导出变量 函数 类

    1. DLL的概念 DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数.变量或类.这些可以直接拿来使用. 静态链接库与动态链接库的区别:   (1)静态链接 ...

  7. Delphi 调用netsh命令修改IP地址

    Delphi 调用netsh命令修改IP地址 先介绍一下Netsh命令的使用方法: 在这里跟大家介绍几个简单的指令 1.Show IP 1.1Cmd Mode 直接在cmd下面输入 netsh int ...

  8. Win32下 Qt与Lua交互使用(四):在Lua脚本中自由执行Qt类中的函数

    话接上篇.通过前几篇博客,我们实现在Lua脚本中执行Qt类中函数的方法,以及在Lua脚本中连接Qt对象的信号与槽. 但是,我们也能发现,如果希望在Lua脚本中执行Qt类的函数,就必须绑定一个真正实现功 ...

  9. Win32下 Qt与Lua交互使用(二):在Lua脚本中使用Qt类

    话接上篇.成功配置好Qt+Lua+toLua后,我们可以实现在Lua脚本中使用各个Qt的类.直接看代码吧. #include "include/lua.hpp" #include ...

随机推荐

  1. java--创建多线程两种方法的比较

    [通过继承Thread] 一个Thread对象只能创建一个线程,即使它调用多次的.start()也会只运行一个的线程. [看下面的代码 & 输出结果] package Test; class ...

  2. html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题

    一.背景 使用ajax,可以实现不需要刷新整个页面就可以进行局部页面的更新.这样可以开发交互性很强的富客户端程序,减少网络传输的内容.但长期以来存在一个问题,就是无法利用浏览器本身提供的前进和后退按钮 ...

  3. highcharts dynamic change line color

    mouseOut: function(){ this.series.graph.attr({"stroke","#ccc"}) }

  4. java环境变量配置问题

    你要配置三个环境变量JAVA_HOMECLASSPATHPath你都配置了吗? 系统变量→新建 JAVA_HOME 变量 .变量值填写jdk的安装目录(本人是 E:\Java\jdk1.7.0) 系统 ...

  5. 基于visual Studio2013解决面试题之1202最大公共字符串

     题目

  6. HDU 1593 find a way to escape

    数学题. 题意是问你能不能逃脱. 当V1的 角速度大于 V2的时候,能够一直保持 V1,O(圆心),V2 三点一线. 跑到一定距离.角速度小于的时候,就以三点一线为初始状态直接跑直线. #includ ...

  7. 小细节--Extjs中,renderTo 和applyTo的区别

    说到web前端框架,extjs绝对算是非常优秀的一个. extjs中,两个方法很像,renderTo和applyTo,我在网上也搜了很多相关的内容,在这里举例为大家进行区分,欢迎大家交流指正. 主要区 ...

  8. Windows Azure入门教学系列 (六):使用Table Storage

    本文是Windows Azure入门教学的第六篇文章. 本文将会介绍如何使用Table Storage.Table Storage提供给我们一个云端的表格结构.我们可以把他想象为XML文件或者是一个轻 ...

  9. Winfrom 文本框回车进入下一个个单元格(TextBox)

    1.重写方法 OnShown protected override void OnShown(EventArgs e) { base.OnShown(e); foreach (Control ct i ...

  10. 大容量XFS异常处理

    今天在检查报警的时候发现部分数据异常,登陆备份机查看文件状态的时候发现磁盘空间已经满了,inode也已经有问题了,因此先停掉了所有的备份进程,开始检查问题. 首先是磁盘空间满了,尝试删除部分文件,发现 ...