1 怎样编写一个VC的DLL,其导出的类能在Delphi中使用?怎样使用?
2 怎样编写一个Delphi的DLL,其导出的类能在VC中使用?怎样使用?
最好给个例子!
谢谢!
2 怎样编写一个Delphi的DLL,其导出的类能在VC中使用?怎样使用?
最好给个例子!
谢谢!
解决方案 »
- TWebBrower里面的页面出问题了啊,大家帮我下
- delphi中显示数据库记录用哪个控件速度快并且好用?是dbgrid吗?
- 做桌面软件用delphi 好 还是用c#好
- 怎样遍历所有相同的按钮生成所有相同的事件过程,详细看内容
- 三层中的问题,有兴趣,大家探讨!
- 怎么通过SQL PROFILER 跟踪易飞ERP用到的sql语句
- Interface not supported!请各位高手帮忙
- 请教大家一个adodataset更新指定表的问题。
- 我有个DBEDIT,想显示日期,但不想自己手工输入,想点击框右边的一钮马上显示象个月历表样的日期,很方便的选择,不知各位大侠,能否教小
- ADOConnection在连接SQL数据库?
- 在DELPHI 中嵌入汇编指令
- 怎么判断oracle中一个字段的类型?
2.利用规范的COM接口
3.利用结构体做简易的代码级"类"共享
1、在VC++的头文件中说明类,注意,定义等类方法
(1)最后一个为析构函数;
(2) 倒数第二个是建构方法;
(3)定义公开的方法:virtual void _stdcall Free(),该方法将调用析构函数
(4) 其他所有方法均定义为:virtual 、_stdcall;
(5)不要定义常数属性(即直接读取实例内步定义的变量的值),实现属性的方法、函数也要定义为virtual 、_stdcall;
2、在.cpp文件中:
(1)实现类的方法,注意Free()的实现,要调用析构函数;
(2)增加一个独立的函数:CreateObject,函数内部调用类的建构方法,返回类的句柄(假定为CCreateObject类型),(对应Delphi的调用方式为Cdel);
(3)在.cpp文件的结尾出输出CreateObject函数:
extern "C" __declspec(dllexport) CCreateObject CreateObject(......)
3、在Delphi程序中,重新定义类CCreateObject,
(1)要完全按照在VC++中类的方法排列次序逐一说明(不包括建构和析构,但是包括Free),所有方法都定义为:Virtual;StdCall;Abstract;
(2)定义新的建构方法
Class Function Create(......) CCreateObject;
(3)说明函数类型:
Type CCreateObject=Function(......); Cdecl; //函数类型
(4)定义函数变量:
Var CreateObject: CCreateObject;
(5)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++的类定义中定义。