如题

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/629/629804.xml?temp=.326626
      

  2.   

    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
      TYxl=function:pchar;stdcall;
      Tcjd=function:pchar;stdcall;
      Tfuck=function:pchar;stdcall;
    var
      Form1: TForm1;
    implementation
    procedure TForm1.Button1Click(Sender: TObject);
    var    wnd : Thandle;
            cjd:Tcjd;
            yxl:Tyxl;
            aa:Tfuck;
    begin wnd:=loadlibrary('D:\cjd\DLL\Dll_pro.dll');
     if wnd <> 0 then
      begin
        yxl:= GetProcAddress(wnd,'yxl');
        cjd:= GetProcAddress(wnd,'cjd');
        aa:= GetProcAddress(wnd,'fuck');
        if assigned(cjd)and assigned(yxl)  then
          showmessage('成功!')
        else
          showmessage('不成功!');  
      end;
      //调用函数
      showmessage( string(cjd)+ string(aa)+ string(yxl) );
      freelibrary(wnd);
    end;
      

  3.   

    静态调用
    在project->setting->link-〉liberay modula 加入*.lib在你要调用的cpp文件中加入
    extern "C"
    {
    声明你的dll函数
    }
    ok,可以用了
      

  4.   

    使用了三个Win32 API函数:LoadLibrary()、FreeLibrary()、GetProcAddress()。
    LoadLibrary()声明如下://自己查帮助吧
    上述函数调入由lpLibFileName参数指定的DLL模块,并将其映射到调用进程的地址空间。如果调用成功,函数将返回该模块的句柄;若失败,返回值为0,并触发一异常。你可以查阅在线帮助中LoadLibrry()函数的详细说明以及可能返回的错误值。
    FreeLibrary()声明如下://自己查帮助吧
    FreeLibrary()函数减小LibModule指定的库的实例计数。当该DLL的实例计数是零时,调用的DLL就会被释放。实例计数记录使用这个DLL的任务数。
    GetProcAddress()返回的是一个函数在模块中的地址,其中由hModule参数指定模块。
    hModu le是从LoadLibrary()函数返回的结果THandle。如果GetProcAddress()调用失败,则返回nil。你只有调用GetLastError()才能获得详细的错误信息。