蠢问题(50分)

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

Another_eYes

Unregistered / Unconfirmed
GUEST, unregistred user!
如何定义处于DLL中能被DLL外程序引用的类?
引用者又如何定义?
需要例子
 
1.只有同一个厂家的编译器才能引用DLL中引出的类.即,如果您用BC做了类的DLL,
这个DLL只有BC可以使用,VC使用的可能性极小.也许Delphi可以使用,但没有试
过,而且可能性不大.
2.将类的实现严格地定义为.H和.CPP,.H中有类及类的inline成员函数的定义,
所有其它成员函数和静态成员变量在.CPP中定义好.在类的定义前冠以
__export关键字.
3.编译连接.CPP为DLL,同时应该有同名的.LIB文件,但没有也可以.
4.如果没有.LIB,用IMPLIB.EXE从DLL生成.注意必须使用编译器本身带的,否则
可能不兼容.
5.引用该DLL的工程中,需要引用类的模块包含上面写的.H,但记得将类前面的
__export改成__import(这可以由宏和条件编译实现),引用的工程中还须
加入.LIB文件.
 
要求delphi的实现方法及例子
 
你现在在写什么程序!
dll里可以用类!比较麻烦!
首先要一个纯虚类!其函数要为abstract!然后派生一个类实现!
dll只能公布函数!所以必须公布一个函数用它来创建类的实例!
如:
begin
yourClass.create;
end;
使用程序把纯虚类的声明copy!
就可以使用了!但要注意类的函数声明的顺序不能错!
 
在一个单元里声明:
Tbase=class(Tobject)
public
function inc:integer;virtual;abstract;
end;

在dll单元里:
Tbase1=class(Tbase)
private
i:integer;
public
function inc:integer;override;
end;

function Tbase1.inc:integer;
begin
result:=inc(i);
end;
在建立一个输出函数:
function NewObject:Tbase1
begin
result:=Tbase1.create;
end

在使用单元里:
加入Tbase;
var temp:Tbase;
temp:=newobject;//dll的输出函数!
用完了free;
利用了类继承的兼容性!
 
Another_eYes,有例子了,是否该结束问题了呢?
 
接受答案了.
 
后退
顶部