解决方案 »

  1.   

    DLL不支持数据共享,clientsocket 当然不能连接数据库啦!
      

  2.   

    有一办法,就是通过共享内存。连接TDataModule。
      

  3.   

    clientsocket  在 DLL里的应用,不是连接数据库
      

  4.   

    unit Unit_SocketDll;interfaceuses Dialogs,SysUtils,classes,Windows,Forms,stdctrls, scktcomp;function ClientServerSocketDll(StrHostName:PChar; i_PortNo:integer; StrMsg:String; Var ResultStr:PChar):Boolean;export;
    implementationfunction ClientServerSocketDll(StrHostName:PChar; i_PortNo:integer; StrMsg:String; Var ResultStr:PChar):Boolean;
    var ClientSocket1:TClientSocket;
        Stream : TWinSocketStream;
        Buffer : array[0 .. 1000] of Char;
        Str:string;
    begin
         try
             ClientSocket1:=TClientSocket.Create(nil);
             ClientSocket1.Address:=StrHostName;
             ClientSocket1.Port:=i_PortNo;
             ClientSocket1.ClientType:=ctBlocking;
             ClientSocket1.Socket.Open(StrHostName,StrHostName,'',i_PortNo,true);
             Stream:=TWinSocketStream.Create(TCustomWinSocket(ClientSocket1.Socket),6000);
             if (ClientSocket1.Socket.Connected<>true) then
             begin
                  Result:=False;
                  Exit;
             end;
             ClientSocket1.Socket.SendText(Trim(StrMsg)+#10#13);
             if (Stream.WaitForData(120000)<>true) then
             begin
                  Result:=False;
                  MessageBox(Application.handle,'发送数据包到服务器发生超时错误!','超时错误',MB_OK+MB_ICONERROR);
                  Exit;
             end;
             if (Stream.Read(buffer,1000)=0) then
             begin
                  Result:=False;
                  MessageBox(Application.handle,'Socket通迅包发生从服务器获取数据的错误!','无法获取数据',MB_OK+MB_ICONERROR);
                  Exit;
             end;
             Str:=copy(Buffer,1,length(buffer));
             Result:=True;
             ResultStr:=PChar(Str);
         Except
                ClientSocket1.Socket.Close;
                Stream.Free;
                MessageBox(Application.handle,'Socket通迅发生了异常,请检查网络连接是否正常!','Socket异常',MB_OK+MB_ICONERROR);
                Result:=False;
         end;
    end;
    以上引自hmyhuo1983
      

  5.   

       远程注入首先得开线程在目标进程运行,猜想你是由于非阻塞模式下,没有连接到服务器你就发送数据,其实只有等到连接到服务器才能发送数据,但是你提前了。 由于是DLL注入就存在重定位的问题了
      

  6.   

     由于是DLL注入就不存在重定位的问题了 
      

  7.   

       我写了一下不知道何原因就是不执行begin end 里面的代码! 注入的时候dll确实在别的进程能看到这个DLL了!由于不执行初始化代码造成的! 不知道那位大侠知道怎么解决!
      

  8.   

    接收内容:test 接收时间:2014-12-03 10:38:25  这个是我的测试结果; 确实是使用阻塞方式是可以的,我这样猜想由于非阻塞使用了窗口,当注入的线程结束后,就无法收到消息了,因为窗口是跟线程相关联的,所以无法连接到服务器.
      

  9.   

        测试了一下注入QQ和系统Explorer.exe 都没有问题! 我的XP系统