需要在一个a.dll中动态调用另一个b.dll,a.dll中有方法 get(i:integer):stdcall;在这个方法中调用了b.dll中的方法send(i:integer;str:string):stdcall,可是sendzhong的参数i怎么也得不到get传过来得参数i,是怎么一会事.

解决方案 »

  1.   

    一步一步跟综测试1.检查你的外部exe调用a.dll的get(i:integer),i 是否已经传进去了2.检查a.dll的get函数,对b.dll的send函数调用是否正确~~~
      

  2.   

    我跟啦
    调用都正确,exe调用get有参数,但在get函数中显示i的值为空;

    外部exe中
    get(5)get函数这样get(i:integer);stdcall;
    var
    m:integer;
    begin
      m:=i;
    end;
    m的值为空;
      

  3.   

    你用的是过程,而不是函数,所以没有返回值。楼主先把process和function搞清楚。
      

  4.   

    不明白你是具体怎么传的~~两个DLL是不能共享全局变量的!
    可以通过消息传递或者通过函数返回值!
      

  5.   

    >>我跟啦
    >>调用都正确,exe调用get有参数,但在get函数中显示i的值为空;应该是dll函数的类型没有声明对,或者有可能是exe没有正确的加载dll,楼主,打开dll的project,然后设置好host application 为你的exe,然后在get函数中下个断点,看看exe调用get(5),为什么会没有传进来
      

  6.   

    Tgeturl=procedure(KeyWord,hIp: string; Fmaxpagecount,hport: integer);stdcall;var
    geturl:Tgeturl;procedure TForm1.Button1Click(Sender: TObject);
    var
      Fhand:Thandle;
    begin
      Fhand:=loadlibrary('aa.dll');
      @geturl:=getprocaddress(fhand,'Geturl');
      geturl(trim(edit1.Text),'192.161.56.29',1,5096);
      freelibrary(fhand);
    end;
    Tsend =function(port:integer; url, siteurl, sitename, song, singer, special, ip:string):
        boolean; stdcall;
    var
      sendstr: Tsend;procedure Geturl(KeyWord,hIp: string; Fmaxpagecount,hport: integer);
    var
      ip:string;
      i,port: Integer;
      Fhandle: Thandle;
    begin
      showmessage(inttostr(hport)); 这里显示不是5096
      ip:=hip;
      port:=hport; 
      showmessage(ip);      这里显示不是'192.161.56.29'
      showmessage(keyword);   这个显示正常即(edit1.Text)的值
      showmessage(inttostr(Fmaxpagecount)); 这里显示是0不是1
      try
        Fhandle := loadlibrary(pchar('send.dll'));
        @sendstr := Getprocaddress(Fhandle, 'sendstr');
       if sendstr(port, url, siteurl, sitename, song, singer, special, ip)then
    到底怎么一会事,搞不明白
      

  7.   

    DLL接口不要用String!
    用PChar的