请问怎么调用Dll中的类?
我知道调用DLL中的函数方式,可是怎么调用DLL中定义的类呢?
(在google上搜了一天没有找到方法,请高手指教)

解决方案 »

  1.   

    告诉你在刘艺的那本《Delphi面向对象编程思想》上有
      

  2.   

    //不知道这个有不有用
    //Delphi 6 开发人员指南//函数单元{ Copyright ?2001 Delphi 6 Developer's Guide Xavier Pacheco
      and Steve Teixeira }unit StringConvertImp;
    {$DEFINE STRINGCONVERTLIB}interface
    uses SysUtils;
    {$I StrConvert.inc}function InitStrConvert(APrepend, AAppend: String): TStringConvert; stdcall;implementationconstructor TStringConvert.Create(APrepend, AAppend: String);
    begin
      inherited Create;
      FPrepend := APrepend;
      FAppend  := AAppend;
    end;destructor TStringConvert.Destroy;
    begin
      inherited Destroy;
    end;function TStringConvert.ConvertString(AConvertType: TConvertType; AString: String): String;
    begin
      case AConvertType of
        ctUpper: Result := Format('%s%s%s', [FPrepend, UpperCase(AString), FAppend]);
        ctLower: Result := Format('%s%s%s', [FPrepend, LowerCase(AString), FAppend]);
      end;
    end;function InitStrConvert(APrepend, AAppend: String): TStringConvert;
    begin
      Result := TStringConvert.Create(APrepend, AAppend);
    end;end.
    //调用单元{ Copyright ?2001 Delphi 6 Developer's Guide Xavier Pacheco
      and Steve Teixeira }unit MainFrm;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;{$I strconvert.inc}type
      TMainForm = class(TForm)
        btnUpper: TButton;
        edtConvertStr: TEdit;
        btnLower: TButton;
        procedure btnUpperClick(Sender: TObject);
        procedure btnLowerClick(Sender: TObject);
      private
      public
      end;var
      MainForm: TMainForm;function InitStrConvert(APrepend, AAppend: String): TStringConvert; stdcall;
      external 'STRINGCONVERTLIB.DLL';implementation{$R *.DFM}procedure TMainForm.btnUpperClick(Sender: TObject);
    var
      ConvStr: String;
      FStrConvert: TStringConvert;
    begin
      FStrConvert := InitStrConvert('Upper ', ' end');
      try
          ConvStr := edtConvertStr.Text;
          if ConvStr <> EmptyStr then
            edtConvertStr.Text := FStrConvert.ConvertString(ctUpper, ConvStr);
      finally
        FStrConvert.Free;
      end;
    end;procedure TMainForm.btnLowerClick(Sender: TObject);
    var
      ConvStr: String;
      FStrConvert: TStringConvert;
    begin
      FStrConvert := InitStrConvert('Lower ', ' end');
      try
          ConvStr := edtConvertStr.Text;
          if ConvStr <> EmptyStr then
            edtConvertStr.Text := FStrConvert.ConvertString(ctLower, ConvStr);
      finally
        FStrConvert.Free;
      end;
    end;end.
      

  3.   

    // StrConvert.inc 文件type  TConvertType = (ctUpper, ctLower);  TStringConvert = class(TObject)
    {$IFDEF STRINGCONVERTLIB}
      private
        FPrepend: String;
        FAppend : String;
    {$ENDIF}
      public
        function ConvertString(AConvertType: TConvertType; AString: String): String;
          virtual; stdcall; {$IFNDEF STRINGCONVERTLIB} abstract; {$ENDIF}
    {$IFDEF STRINGCONVERTLIB}
        constructor Create(APrepend, AAppend: String);
        destructor Destroy; override;
    {$ENDIF}
      end;{ For any application using this class, STRINGCONVERTLIB is not defined and
      therefore, the class definition will be equivalent to:  TStringConvert = class(TObject)
      public
        function ConvertString(AConvertType: TConvertType; AString: String): String;
          virtual; stdcall; abstract;
      end;
    }
      

  4.   

    看过这本书,感觉其实还是以调用方法/函数为基础的,毕竟DLL是很老的技术,范围连C语言都考虑在内,所以本质上不支持调用类的,现有方法多数都是变通的方法/walkaround
      

  5.   

    COM的思想,DLL当然可以,用接口,或者抽象类。
      

  6.   

    TO:linzhengqun(风。爱的翔舞)
    能不能说具体些?TO: lmj2003(雁不归)
    刘艺的那本《Delphi面向对象编程思想》例子我看看了,确实有用,
    可是我想用VC封装一个DLL,接口是个类,我在Delphi里声明这个类,就可以用类里的函数。不知道VC能不能把类给传出来。??????
      

  7.   

    有没有刘艺的《Delphi面向对象编程思想》
    里面有,好好看一下。
      

  8.   

    没有刘艺的《Delphi面向对象编程思想》
    没有钱买,在网上下载了例子看了一下,好像没有提到怎么在VC里封装,
    Delphi 里可以直接声明 这样的函数,
    function CarObj:ICar;
    begin
      Result:=TCar.create;
    end;VC好像不行。。TO: ffwin() 
    应该可以,可是怎样实现啊?
      

  9.   

    使用接口和DLL结合的方式比较爽......