我用VB写了一个DLL,现在想通过Delphi动态调用它。引用这个DLL有两个参数(a 和 b),我要先传这两个参数值,然后调用里面的一个过程(ShowForm)。

解决方案 »

  1.   

    你要注意这么几个问题。
    1。参数如是字符的那你就的化为pchar的。
    2。dll的方式是stdcall 的。写的时候就是这样的,调的时候也是这样的。
      

  2.   

    一定要用STDCALL啊!
    别的没什么可说的了!
      

  3.   

    因为pascal的参数传递次序和vb、c等的传递次序相反,stdcall就是起到使参数从右向左穿的目的的,另外,如果有字符型的参数一定要转换为pchar类型的。
      

  4.   

    怎么个过程?不太明白!是不是DLL的输入参数是a、b,然后调用ShowForm ??
      

  5.   

    procdure ok(n:Integer,b:integer);stdcall; external 'PROJECT2.DLL';
      

  6.   

    TShowForm = function(dy,qx:integer): Bool; StdCall;
    procedure TfrmCallDLL.btnCallDLLClick(Sender: TObject);
    var
      lLibHandle: THandle;
      lShowForm: TShowForm;
    begin
      lLibHandle := LoadLibrary('RptDLL.DLL');
      try
        if lLibHandle = HINSTANCE_ERROR then
          raise EDLLLoadError.Create('Unable to Load DLL');
        @lShowForm := GetProcAddress(lLibHandle, 'Showpreview');
        if not (@lShowForm = nil) then
        // lShowForm;
            lshowform(0,1);
      finally
        FreeLibrary(lLibHandle);
      end;
    end;