ActiveX DLLの作り方
ActiveX DLLプロジェクトを作成するには
メソッドを追加するには
プロパティを追加するには
最後に「実行」-「ActiveXサーバの登録」を行うと、ActiveX EXEが作成されてレジストリに登録されます。他のマシンに登録するときは、regsvr32.exeによって行います。
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.