Safe Api .doc 不就记录了safecom.dll中的函数使用说明吗? 你真是骑着驴找驴,真不懂你在想干什么!!
你不妨先看看这个,或许对你有所帮助 访问DLL库有两种方式,一种是静态引用,另一种是动态引用。 用静态引用这种方法装入DLL要做两件事情:为DLL 库创建一个输入单元,以及用USES把输入单元连接到要使用DLL 函数的程序模块中。为DLL库创建的输入单元与普通的单元的区别仅在于:在它的接口处声明的过程、函数,并不在它的实现部分给出真正的实现代码,而是用external关键字把过程、函数的实现细节委托给外部DLL模块。 external命令的使用语法如下: procedure /function 过程/函数名;external DLL模块名; 下面给出为上面创建的minmax.DLL库写的输入单元源文件testdll .pas,从中可看出输入单元 与一般 单元的一些差别,代码如下所示: unit testdll; interface uses function Min (X, Y: Integer): Integer; function Max (X, Y: Integer): Integer;
implementation
function Min; external ‘minmax.DLL’; function Max; external ‘minmax.DLL’; end.
一个应用程序若想调用minmax.DLL中的函数,只须在其uses语句中加入testdll 单元即可。 动态装入DLL,要用到Windows的三个API函数。Loadlibrary、Freelibrary和GetprocAddress 。loadlibrary函数用来装入DLL库,其调用格式如下: function loadlobrary (DLLfileName:Pchar): THandle: 当不再需要一个DLL库时,应调用FreeLibrary函数将其释放,以空出宝贵的内存资源,其调用格式如下: procedure FreeLibrary (Libmodule:THandle) Libmodule 为由LoadLibrary调用得到的DLL库句柄。在用loadlobrary 函数装入某个DLL库和调用FreeLibrary释放该DLL库之间的程序段中, 可以使用该DLL库中的过程和函数,具体使用方法是:用GetprocAddress函数把DLL库中函数的地址传递给程序中某个函数变量,再用该变量实现DLL函数的调用。GetprocAddress函数声名如下, function GetprocAddress (Libmodule:THandle:procname:pchar):TFarProc:
如下例所示: type TTimeRec = record Second: Integer; Minute: Integer; Hour: Integer; end; TGetTime = procedure(var Time: TTimeRec); THandle = Integer; var Time: TTimeRec; Handle: THandle; GetTime: TGetTime; ... begin Handle := LoadLibrary('DATETIME.DLL'); if Handle <> 0 then begin @GetTime := GetProcAddress(Handle, 'GetTime'); if @GetTime <> nil then begin GetTime(Time); with Time do WriteLn('The time is ', Hour, ':', Minute, ':', Second); end; FreeLibrary(Handle); end; end; 在调用动态链接库时应注意, 所需动态链接库须与应用程序在同一目录或Windows System 目录下。
不就记录了safecom.dll中的函数使用说明吗?
你真是骑着驴找驴,真不懂你在想干什么!!
访问DLL库有两种方式,一种是静态引用,另一种是动态引用。
用静态引用这种方法装入DLL要做两件事情:为DLL 库创建一个输入单元,以及用USES把输入单元连接到要使用DLL 函数的程序模块中。为DLL库创建的输入单元与普通的单元的区别仅在于:在它的接口处声明的过程、函数,并不在它的实现部分给出真正的实现代码,而是用external关键字把过程、函数的实现细节委托给外部DLL模块。
external命令的使用语法如下:
procedure /function 过程/函数名;external DLL模块名;
下面给出为上面创建的minmax.DLL库写的输入单元源文件testdll .pas,从中可看出输入单元 与一般 单元的一些差别,代码如下所示:
unit testdll;
interface
uses
function Min (X, Y: Integer): Integer;
function Max (X, Y: Integer): Integer;
implementation
function Min; external ‘minmax.DLL’;
function Max; external ‘minmax.DLL’;
end.
一个应用程序若想调用minmax.DLL中的函数,只须在其uses语句中加入testdll 单元即可。
动态装入DLL,要用到Windows的三个API函数。Loadlibrary、Freelibrary和GetprocAddress 。loadlibrary函数用来装入DLL库,其调用格式如下:
function loadlobrary (DLLfileName:Pchar): THandle:
当不再需要一个DLL库时,应调用FreeLibrary函数将其释放,以空出宝贵的内存资源,其调用格式如下:
procedure FreeLibrary (Libmodule:THandle)
Libmodule 为由LoadLibrary调用得到的DLL库句柄。在用loadlobrary 函数装入某个DLL库和调用FreeLibrary释放该DLL库之间的程序段中, 可以使用该DLL库中的过程和函数,具体使用方法是:用GetprocAddress函数把DLL库中函数的地址传递给程序中某个函数变量,再用该变量实现DLL函数的调用。GetprocAddress函数声名如下,
function GetprocAddress (Libmodule:THandle:procname:pchar):TFarProc:
如下例所示:
type
TTimeRec = record
Second: Integer;
Minute: Integer;
Hour: Integer;
end;
TGetTime = procedure(var Time: TTimeRec);
THandle = Integer;
var
Time: TTimeRec;
Handle: THandle;
GetTime: TGetTime;
...
begin
Handle := LoadLibrary('DATETIME.DLL');
if Handle <> 0 then
begin
@GetTime := GetProcAddress(Handle, 'GetTime');
if @GetTime <> nil then
begin
GetTime(Time);
with Time do
WriteLn('The time is ', Hour, ':', Minute, ':', Second);
end;
FreeLibrary(Handle);
end;
end;
在调用动态链接库时应注意, 所需动态链接库须与应用程序在同一目录或Windows System 目录下。
我问:为什么不能直接用dll呀,比如在网页中先嵌入<OBJECT ID="SafeEngineCtl"... codebase="SafeCOM.dll" ...>,然后直接在网页中调用SafeEngineCtl.Geta(...)不就可以了吗?
他答:dll是动态链接库,SafeEngineCtl.Geta(...)在网页中不起作用的,一定要用delphi做个控件,里面包含方法或者函数来调用dll中的Geta(...);
比如做好的控件叫myCtl,控件中包含myGeta(...),在网页中先嵌入<OBJECT ID="lalala"... codebase="myCtl.ocx" ...>,然后在在网页中通过lalala.myGeta(...)调用安全公司给的SafeCOM.dll中的相应方法来解决问题 呜呜,大概就是这个意思噢,阿德,你昨天是这样理解得吗?如果不是,应该怎么做呀?
如果是普通类型的.dll在网页中是不能直接调用的,你必须自己做一个activex dll,在你自己的.dll中调用安全公司提供的.dll。你的dll实际上是一个COM,这样才能在能在网页中调用啊!
你的工作就相当于给安全公司提供的dll做一个外包装,也可以说做一个让其他用户可以在网页中调用的接口。
另一种情况,如果安全公司提供的dll已经是一个ActiveX Dll,那样可以直接让用户使用的,不过如果觉得这样不方便的话和上述方法一样,也可以做一下包装的。
我一开始对要做什么不是很清楚哦,脑子昏昏的,多亏各位给了我一些启发,虽然不是很有针对性,但我也很开心的啦 :)
我目前是如下解决调用的,大概是很笨的办法哦~
procedure TPanelX.Method1(const Param1: WideString);
var
ASafeInstance: TmyShow;
begin
ASafeInstance := TmyShow.Create(nil);
try
ASafeInstance.showMsg(Param1);//调用dll中的showMsg方法
finally
ASafeInstance.Free;
end;
end;
我先结分了,如果你愿意和我继续一起探讨这方面问题的话,给我来信:[email protected],我非常欢迎哦,不过我在这方面是小菜鸟 :<