关于在VC++的Dll中调用Delphi的Dll,且返回及传输的都是对象 ( 积分: 50 )

  • 主题发起人 主题发起人 aaccccaa
  • 开始时间 开始时间
A

aaccccaa

Unregistered / Unconfirmed
GUEST, unregistred user!
请各位帮帮忙,我对VC++不是很熟悉,但是确实一定要实现这种功能。
在Delphi中的Dpr中的定义:
function GetMainControl(dllParent: TPtControl): TMLControl;
StdCall;
exports
GetMainControl;
Delphi中引用的类的原型:
TPtControl = class
hPtr: HWND;

//获取长度
function GetLen: Integer;
virtual;
stdcall;
abstract;
end;

TMainControl = class
procedure Init;
virtual;
stdcall;
abstract;
procedure Quit;
virtual;
stdcall;
abstract;
end;

TMLControl = class(TMainControl)
procedure Init;
override;
procedure Quit;
override;
end;

那要使用此Dll中的输出函数,
function GetMainControl(dllParent: TPtControl): TMLControl;
StdCall;
我在VC中该如何做呢?????
我是这样做的建立ControlClass.h,内容如下:
#include "stdafx.h"
class TPtControl
{
HWND hPtr;
virtual int GetLen()=0;
};
class TMainControl
{
virtual void Init()=0;
virtual void Quit()=0;
};
class TMPControl :public TPtControl {
int GetLen();
}
我想知道具体的代码。
还有在VC中用LoadLibrary的那段代码是怎么用的。另外对Delphi Dll中的
function GetMainControl(dllParent: TPtControl): TMLControl;
StdCall;
在VC中怎么定义及引用,载入。
 
请各位帮帮忙,我对VC++不是很熟悉,但是确实一定要实现这种功能。
在Delphi中的Dpr中的定义:
function GetMainControl(dllParent: TPtControl): TMLControl;
StdCall;
exports
GetMainControl;
Delphi中引用的类的原型:
TPtControl = class
hPtr: HWND;

//获取长度
function GetLen: Integer;
virtual;
stdcall;
abstract;
end;

TMainControl = class
procedure Init;
virtual;
stdcall;
abstract;
procedure Quit;
virtual;
stdcall;
abstract;
end;

TMLControl = class(TMainControl)
procedure Init;
override;
procedure Quit;
override;
end;

那要使用此Dll中的输出函数,
function GetMainControl(dllParent: TPtControl): TMLControl;
StdCall;
我在VC中该如何做呢?????
我是这样做的建立ControlClass.h,内容如下:
#include "stdafx.h"
class TPtControl
{
HWND hPtr;
virtual int GetLen()=0;
};
class TMainControl
{
virtual void Init()=0;
virtual void Quit()=0;
};
class TMPControl :public TPtControl {
int GetLen();
}
我想知道具体的代码。
还有在VC中用LoadLibrary的那段代码是怎么用的。另外对Delphi Dll中的
function GetMainControl(dllParent: TPtControl): TMLControl;
StdCall;
在VC中怎么定义及引用,载入。
 
看你好着急,帮顶
 
不行
DELPHI中的CLASS都是从TObject继承来的
你用BCB还可以
也从TObject继承
VC++中没有,DElphi要用record才行
我看可以这样定义
TPtControl = record
hPtr: HWND;

GetLen:function :Integer;
stdcall;
end;

TMLControl = record
Init: procedure;
stdcall;
Quit: procedure;
stdcall;
end;
delphi中具体的使用细节要依具这样的特征来做
 
恐怕不行,不同语言的对象在内存中的布局是不同的,在VC++的DLL中无法以正常的语法调用Delphi写的DLL,如果还掺杂了继承或虚函数的话,就更麻烦。如果这个问题很好处理的话,当初也不会有COM这种东西出现了。
DLL这种机制不适合以对象为传送参数,最好用简单类型如int, char等。看看你的程序,应该可以做到的。
 
另外,可以考虑一下Interface机制,到Google上用Interface Designing code6421为关键字搜一下,有一篇文章讲这个,可以试试。
 
对了,上面的还有成员函数this指针的问题,一句话,只有还没有想到的麻烦
如果当初考虑到做DLL且会用于VC等,不该用对象这些东西的
 
后退
顶部