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

解决方案 »

  1.   

    既然已经作成dll了,直接按照说明在程序里面调用就行了!
      

  2.   

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

  3.   

    这个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.   

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

  6.   

    DLL如果用在浏览器中比较难!
    写控件至少也得是COM/ACTIVEX控件,
    扩展名是OCX
    就算是做成这样的控件,能不能到到目的,还很难说,毕竞归根到底还得用DLL
    看来最好是和厂家协商一下了,让他们提供OCX控件或是DCU(最好是PAS源码),而不是DLL!
      

  7.   

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