D daiadou Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-14 #1 VC编写的的扩展DLL能导出类,在Delphi中怎么使用?
W wenyue Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-15 #4 例如在EXAMPLE.DLL中的C原型为int abcd(int a); 定义为 function abcd(a:integer):integer; cdecl; external 'example.dll'; 此外,也可以用 LoadLibrary,GetProcAddress的方式来对不定名称的DLL来调用,例如 在实现PLUGIN的时候,PLUGIN的DLL名未知,只能用查找目录的方法得到DLL名称,然后使用 动态加载
例如在EXAMPLE.DLL中的C原型为int abcd(int a); 定义为 function abcd(a:integer):integer; cdecl; external 'example.dll'; 此外,也可以用 LoadLibrary,GetProcAddress的方式来对不定名称的DLL来调用,例如 在实现PLUGIN的时候,PLUGIN的DLL名未知,只能用查找目录的方法得到DLL名称,然后使用 动态加载
C chenliang_fly Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-15 #5 对,一定要注意方法的申明方式。其他同Pascal一样
D daiadou Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-15 #6 我说的是扩展DLL,能导出类的.这里面有会VC的吗
W wenyue Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-15 #7 直接使用没有直接办法,除非其是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在虚方法表的组织是一致的.
直接使用没有直接办法,除非其是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在虚方法表的组织是一致的.