Delphi能否使用VC编写的扩展DLL(200分)

D

daiadou

Unregistered / Unconfirmed
GUEST, unregistred user!
VC编写的的扩展DLL能导出类,在Delphi中怎么使用?
 
象用DELPHI编译的一样!
 
当然可以啦,标准都是一样的。
 
例如在EXAMPLE.DLL中的C原型为int abcd(int a);
定义为 function abcd(a:integer):integer;
cdecl;
external 'example.dll';
此外,也可以用 LoadLibrary,GetProcAddress的方式来对不定名称的DLL来调用,例如
在实现PLUGIN的时候,PLUGIN的DLL名未知,只能用查找目录的方法得到DLL名称,然后使用
动态加载
 
对,一定要注意方法的申明方式。其他同Pascal一样
 
我说的是扩展DLL,能导出类的.这里面有会VC的吗
 
直接使用没有直接办法,除非其是COMOBJECT的
间接使用是有办法的,当然也得修改C DLL的源代码
方法一:
例如将对象创建和删除的方法暴露出来,并且将需要调用的类的方法也暴露出来.
FUNCTION CREATECCLASS:THANDLE;
CDECL;
FUNCTION DESTROYCCLASS(HANDLE:THANDLE);CDECL;
FUNCTION CALLMETHOD1(HANDLE:THANDLE;OTHER PARAM DECLARE HERE....):ANY TYPE;
CDECL;
方法二
将C的需要调用类方法写成虚拟方法
然后在DELPHI中定义那些相应的虚拟方法,例如
THackCClass=Class
function Method1(...):any;
virtual;CDECL;
............................
end;

然后借助方法一的方法强制成DELPHI类来使用这些方法
THACKCCLASS(HANDLE).METHOD1(......)
这样做是因为C和DELPHI在虚方法表的组织是一致的.
 
接受答案了.
 
顶部