在VC中的DLL类导出以后是否可以被delphi调用?
1个回答
2013-06-17
展开全部
在VC中的DLL类导出以后完全是可以被delphi调用的。
调用方法及说明如下:
br/>调用方法及说明如下:
<="" a="">调用VC++类的方法:
1、在VC++的头文件中说明类,注意,定义等类方法
最后一个为析构函数;
倒数第二个是建构方法;
定义公开的方法:virtual void _stdcall Free(),该方法将调用析构函数
其他所有方法均定义为:virtual 、_stdcall;
不要定义常数属性,实现属性的方法、函数也要定义为virtual 、_stdcall;
2、在.cpp文件中:
实现类的方法,注意Free()的实现,要调用析构函数;
增加一个独立的函数:CreateObject,函数内部调用类的建构方法,返回类的句柄,;
在.cpp文件的结尾出输出CreateObject函数:
extern "C" __declspec(dllexport) CCreateObject CreateObject(......)
3、在Delphi程序中,重新定义类CCreateObject,
要完全按照在VC++中类的方法排列次序逐一说明,所有方法都定义为:Virtual;StdCall;Abstract;
定义新的建构方法
Class Function Create CCreateObject;
说明函数类型:
Type CCreateObject=Function(......); Cdecl; //函数类型
定义函数变量:
Var CreateObject: CCreateObject;
CCreateObject.Create的实现,只需要一句话:
Result:=CreateObject
其中CreateObject就是从VC++的DLL中导出的建立CCreateObject实例的函数。
4、在Delphi程序中,可以动态连接VC++的Dll库:
DLL_Handle:=LoadLibrary(PChar(DLLPath));
DLL_Handle>0 Then //若加载成功,
Begin //则定位函数
Try
@CreateObject:=GetProcAddress(DLL_Handle,CreateObject);
Except
FreeLibrary(DLL_Handle);
End
End
5、使用:
创建实例:AInst:=CCreateObject.Create(......);
调用方法:AInst.Method...... 与Delphi内定义的类一样处理。
注意:
1、实现的方法为Delphi的虚拟表方法;
2、在没有建立实例前,类方法也不能使用,因为类方法也只能通过实例才能映射过来,这与本地说明的类不一样;
3、一定要特别注意两边方法的对应关系;
4、在Delphi这边,同样也不能定义直接取或设置值的属性,必须用函数和方法实现,且实现的函数或方法一定要在VC++的类定义中定义.
注意:
在delphi定义类的时候,一定要注意 procedure myMax(const x,y:Integer; var z:Integer);virtual ;stdcall; abstract;后面的virtual ;stdcall; abstract;顺序.
调用方法及说明如下:
br/>调用方法及说明如下:
<="" a="">调用VC++类的方法:
1、在VC++的头文件中说明类,注意,定义等类方法
最后一个为析构函数;
倒数第二个是建构方法;
定义公开的方法:virtual void _stdcall Free(),该方法将调用析构函数
其他所有方法均定义为:virtual 、_stdcall;
不要定义常数属性,实现属性的方法、函数也要定义为virtual 、_stdcall;
2、在.cpp文件中:
实现类的方法,注意Free()的实现,要调用析构函数;
增加一个独立的函数:CreateObject,函数内部调用类的建构方法,返回类的句柄,;
在.cpp文件的结尾出输出CreateObject函数:
extern "C" __declspec(dllexport) CCreateObject CreateObject(......)
3、在Delphi程序中,重新定义类CCreateObject,
要完全按照在VC++中类的方法排列次序逐一说明,所有方法都定义为:Virtual;StdCall;Abstract;
定义新的建构方法
Class Function Create CCreateObject;
说明函数类型:
Type CCreateObject=Function(......); Cdecl; //函数类型
定义函数变量:
Var CreateObject: CCreateObject;
CCreateObject.Create的实现,只需要一句话:
Result:=CreateObject
其中CreateObject就是从VC++的DLL中导出的建立CCreateObject实例的函数。
4、在Delphi程序中,可以动态连接VC++的Dll库:
DLL_Handle:=LoadLibrary(PChar(DLLPath));
DLL_Handle>0 Then //若加载成功,
Begin //则定位函数
Try
@CreateObject:=GetProcAddress(DLL_Handle,CreateObject);
Except
FreeLibrary(DLL_Handle);
End
End
5、使用:
创建实例:AInst:=CCreateObject.Create(......);
调用方法:AInst.Method...... 与Delphi内定义的类一样处理。
注意:
1、实现的方法为Delphi的虚拟表方法;
2、在没有建立实例前,类方法也不能使用,因为类方法也只能通过实例才能映射过来,这与本地说明的类不一样;
3、一定要特别注意两边方法的对应关系;
4、在Delphi这边,同样也不能定义直接取或设置值的属性,必须用函数和方法实现,且实现的函数或方法一定要在VC++的类定义中定义.
注意:
在delphi定义类的时候,一定要注意 procedure myMax(const x,y:Integer; var z:Integer);virtual ;stdcall; abstract;后面的virtual ;stdcall; abstract;顺序.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询