看流星社区

 找回密码
 注册账号
查看: 2300|回复: 0

[Delphi] Delphi调用C++导出的类

[复制链接]

该用户从未签到

发表于 2014-6-28 08:59:35 | 显示全部楼层 |阅读模式
打开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库没啥必要,纯属为了测试.可以将一些非界面相关的库导出来用,以后有空在继续吧.
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-20 19:32

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表