delphi.gif (306 バイト) ActiveX DLLの作り方


toach.gif (917 バイト) ActiveX DLLプロジェクトを作成するには

  1. 「ファイル」-「新規作成」を実行して、ActiveXタブを選びActiveXライブラリを選んでOKボタンを押します。
  2. 同様にしてオートメーションオブジェクトを選んでOKボタンを押します。
  3. オートメーションのオブジェクトウィザードが表示されるので、クラス名を入力します。
  4. プロジェクトに名前を付けて保存します。

 

toach.gif (917 バイト) メソッドを追加するには

  1. タイプライブラリエディタが表示されるので、インターフェース(I+クラス名)にカーソルを合わせ、右クリックでポップアップメニューを表示させます。
  2. 新規作成メニューでMethodを選ぶと、メソッドが追加されるので、メソッドの名前を変更します。
  3. 更新ボタンを押すとソースコードにメソッドが追加されます。
  4. ソースコードでメソッドを探して、具体的なコードを追加します。

 

toach.gif (917 バイト) プロパティを追加するには

  1. タイプライブラリエディタが表示されるので、インターフェース(I+クラス名)にカーソルを合わせ、右クリックでポップアップメニューを表示させます。
  2. 新規作成メニューでPropertyを選ぶと、プロパティが追加されるので、プロパティの名前と型を変更します。
  3. 更新ボタンを押すとソースコードにプロパティreadとwriteメソッドが追加されます。
  4. ソースコードでメソッドを探して、具体的なコードを追加します。

 

最後に「実行」-「ActiveXサーバの登録」を行うと、ActiveX EXEが作成されてレジストリに登録されます。他のマシンに登録するときは、regsvr32.exeによって行います。

 

-

delphi1.gif (322 バイト) ActiveX DLLの例

この例はParamプロパティに実数を与えるとAnsプロパティに平方根を返す単純なものです。

 

{  unitRootOf.pas }

unit unitRootOf;

interface

uses
  ComObj, ActiveX, projRootOf_TLB;

type
  TTRootOf = class(TAutoObject, ITRootOf)
  protected
    function Get_ans: Double; safecall;
    function Get_param: Double; safecall;
    procedure Set_param(Value: Double); safecall;
    function Get_Error: Integer; safecall;
  private
    FParam: Double;
    FAns: Double;
    FError: Integer;
  end;

implementation

uses ComServ;

function TTRootOf.Get_ans: Double;
begin
    Result := FAns;
end;

function TTRootOf.Get_param: Double;
begin
    Result := FParam;
end;

procedure TTRootOf.Set_param(Value: Double);
begin
    FParam := Value;
    if FParam >= 0 then
    begin
        FAns := Sqrt(FParam);
        FError := 0
    end
    else
    begin
        FAns := 0;
        FError := -1
    end;
end;

function TTRootOf.Get_Error: Integer;
begin
    Result := FError;
end;

initialization
  TAutoObjectFactory.Create(ComServer, TTRootOf, Class_TRootOf, ciMultiInstance);
end.

{ projRootOf_TLB.pas }
unit projRootOf_TLB;


{ このファイルにはタイプライブラリから作成した PASCAL による宣言が収められ
  ています。タイプライブラリエディタで更新をおこなうと内容が書き換えられます。
  このファイルを直接変更しても、タイプライブラリエディタによって上書きされる
  ため変更内容は保存されません。
  }

{ projRootOf Library }
{ Version 1.0 }

interface

uses Windows, ActiveX, Classes, Graphics, OleCtrls, StdVCL;

const
  LIBID_projRootOf: TGUID = '{EB695580-8464-11D1-B2EE-B5F44D0AA776}';

const

{ コンポーネント クラスの GUID }
  Class_TRootOf: TGUID = '{EB695582-8464-11D1-B2EE-B5F44D0AA776}';

type

{ Interfaces の前方参照宣言 }
  ITRootOf = interface;
  ITRootOfDisp = dispinterface;

{ CoClasses の前方参照宣言 }
  TRootOf = ITRootOf;

{ TRootOf Object (オブジェクト) のディスパッチ インターフェース }

  ITRootOf = interface(IDispatch)
    ['{EB695581-8464-11D1-B2EE-B5F44D0AA776}']
    function Get_param: Double; safecall;
    procedure Set_param(Value: Double); safecall;
    function Get_ans: Double; safecall;
    function Get_Error: Integer; safecall;
    property param: Double read Get_param write Set_param;
    property ans: Double read Get_ans;
    property Error: Integer read Get_Error;
  end;

{ ITRootOf デュアルインターフェースの DispInterface 宣言 }

  ITRootOfDisp = dispinterface
    ['{EB695581-8464-11D1-B2EE-B5F44D0AA776}']
    property param: Double dispid 1;
    property ans: Double readonly dispid 2;
    property Error: Integer readonly dispid 3;
  end;

{ TRootOfObject (オブジェクト) }

  CoTRootOf = class
    class function Create: ITRootOf;
    class function CreateRemote(const MachineName: string): ITRootOf;
  end;



implementation

uses ComObj;

class function CoTRootOf.Create: ITRootOf;
begin
  Result := CreateComObject(Class_TRootOf) as ITRootOf;
end;

class function CoTRootOf.CreateRemote(const MachineName: string): ITRootOf;
begin
  Result := CreateRemoteComObject(MachineName, Class_TRootOf) as ITRootOf;
end;


end.

{ projRootOf.dpr }
library projRootOf;

uses
  ComServ,
  projRootOf_TLB in 'projRootOf_TLB.pas',
  unitRootOf in 'unitRootOf.pas' {TRootOf: CoClass};

exports
  DllGetClassObject,
  DllCanUnloadNow,
  DllRegisterServer,
  DllUnregisterServer;

{$R *.TLB}

{$R *.RES}

begin
end.