我手上有SafeCOM.dll和Safe API接口说明.doc,领导要我用delphi做个控件也好,做个程序也好,就是能提供调用dll中函数的接口吧,我似乎一点概念都没有噢。
    哪位好心人给我一些指点吧,谢谢噢。
    最好是做成ocx为后缀的冬冬。

解决方案 »

  1.   

    奇怪了,既然有dll了,你还要作什么?直接用呀,dll中的本身就是接口
      

  2.   

    这个dll是一个发放数字证书的安全公司给我们的,我们是要为一个客户做网络信息传输的系统,所以还是要自己进行二次开发的吧,不能直接用的啦
      

  3.   

    Safe Api .doc
    不就记录了safecom.dll中的函数使用说明吗?
    你真是骑着驴找驴,真不懂你在想干什么!!
      

  4.   

    你不妨先看看这个,或许对你有所帮助
    访问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 目录下。
      

  5.   

    myling(阿德)都说完了,看来我不用说了,就接分
      

  6.   

    stdcall,far,export之间有什么区别
      

  7.   

    谢谢阿德噢,不过我还不是很明白,大概是我昨天没有把问题说的很清楚(其实我自己也是一头雾水~~),今天我又和领导问了一下做控件的意图,我再详细的说说噢:
      我问:为什么不能直接用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中的相应方法来解决问题  呜呜,大概就是这个意思噢,阿德,你昨天是这样理解得吗?如果不是,应该怎么做呀?
      

  8.   

    那要看那个.dll是什么类型的dll。
    如果是普通类型的.dll在网页中是不能直接调用的,你必须自己做一个activex dll,在你自己的.dll中调用安全公司提供的.dll。你的dll实际上是一个COM,这样才能在能在网页中调用啊!
    你的工作就相当于给安全公司提供的dll做一个外包装,也可以说做一个让其他用户可以在网页中调用的接口。
    另一种情况,如果安全公司提供的dll已经是一个ActiveX Dll,那样可以直接让用户使用的,不过如果觉得这样不方便的话和上述方法一样,也可以做一下包装的。
      

  9.   

    谢谢各位,我总算有些小小的眉目啦~~  
       我一开始对要做什么不是很清楚哦,脑子昏昏的,多亏各位给了我一些启发,虽然不是很有针对性,但我也很开心的啦  :)  
       我目前是如下解决调用的,大概是很笨的办法哦~  
     
    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],我非常欢迎哦,不过我在这方面是小菜鸟  :<