Delphi 2009 - IdTCPServer1.Execute +Winsock.send = nothing

I've done some searching on the web, and i can't seem to find any answer to the problem i have.
The client is made in c++ using winsock send & recieve.

The server is done with Indy IdTCPServer component.
When the winsock client connects, IdTCPServer get knowledge of it.
However, when the winsock client sends a chararray with the function send(), nothing gets parsed in IdTCPServer.Execute.
I know the client works, since i built a winsock testserver for the occation.
However when using Acontext.Connection.IOHandler.ReadLn it does not.
Is it known that Indy vs winsock base does not work? And does anyone know why the string never gets to the Execute part?
Is there a way to fix it?

Kind Regards
0
jocke
4/4/2009 8:11:37 PM
embarcadero.delphi.tools 5366 articles. 2 followers. Follow

5 Replies
1427 Views

Similar Articles

[PageSpeed] 17

> {quote:title=jocke forslund wrote:}{quote}
> I've done some searching on the web, and i can't seem to find any answer to the problem i have.
> The client is made in c++ using winsock send & recieve.
> 
> The server is done with Indy IdTCPServer component.
> When the winsock client connects, IdTCPServer get knowledge of it.
> However, when the winsock client sends a chararray with the function send(), nothing gets parsed in IdTCPServer.Execute.
> I know the client works, since i built a winsock testserver for the occation.
> However when using Acontext.Connection.IOHandler.ReadLn it does not.
> Is it known that Indy vs winsock base does not work? And does anyone know why the string never gets to the Execute part?
> Is there a way to fix it?
> 
> Kind Regards

If you design the protocol use something like this:
1. Make a packet on client with the following:
[size header][packet type][actual data]
Depending the number of bytes in size header you will have (I assume packet type to be 1 byte):
a. Byte = 255-(1 byte for size header)-(1 byte for packet type), 253 bytes for data
b. Word = 65535-(2 byte for size header)-(1 byte for packet type), 65532 bytes for data
c. DWord = 4294967295-(4 byte for size header)-(1 byte for packet type), 4294967290 bytes for data
I use DWord, anyway you can drop connection if the client tries to send over some number of bytes to be secure.
2. On server execute you call our TClient.DoExecute procedure and loop reading data from client. When you read from client, lets say 123 bytes with:
FSocket.ReadBytes(SomeBuffer, 123, False);
....Some other code...
 the code will not continue after ReadBytes and it will wait until ReadBytes fill SomeBuffer (a TBytes type) with 123 bytes. After that it will continue executing "...Some other code...".
3. Server will read n bytes depending of the size header, so it will read 4 bytes (a DWord). This will be the size for your actual data.
4. Server will read one byte or more for the packet type, so you can have different actions on the packet depending the packet type.
5. Action will will read the remaining bytes, the actual data, from the client and process them.

My Execute procedure I use for a project:
procedure TClient.DoExecute;
var
  Buffer: TBytes;
  size, sizeNoHeader: Cardinal;

  packetType: Byte;
begin
  //[size    ][type][Data]
  //[Cardinal][Byte][Data]
  SetLength(Buffer, 4);

  while Connected and (not FThread.Terminated) do
  begin
    FSocket.ReadBytes(Buffer, 4, False); // read 4 bytes from client to get the packet size
    size := PCardinal(@Buffer[0])^;
    //OutputDebugString( PWideChar(Format('DoExecute ReadBytes -> Size: %d', [size])) );

    sizeNoHeader := size - 4;
    if sizeNoHeader <= 0 then
    begin
      Exit;
    end;

    FSocket.ReadBytes(Buffer, 1, False); // read 1 byte from client for packet type
    packetType := Buffer[0];
    case packetType of
      0: OnPacketType0(sizeNoHeader - 1); // read the rest bytes and do some action
      1: OnPacketType1(sizeNoHeader - 1); // read the rest bytes and do some action
      2: OnPacketType2(sizeNoHeader - 1); // read the rest bytes and do some action
    else
      Disconnect;

      //OutputDebugString( PWideChar(Format('-> DoExecute unknown packetType: %d', [packetType])) );
    end;
  end;
end;

procedure TClient.OnPacketType0(const Size: Cardinal);
var
  Buffer: TBytes;

  DataW: String;
begin
  FSocket.ReadBytes(Buffer, Size, False);

  // since you send a string
  // if you haven't added zero termination on the client increase the Buffer by SizeOf(Char)
  SetLength(Buffer, Length(Buffer) + SizeOf(Char));
  // get our string
  DataW := PWideChar(@Buffer[0]);
  // do some other processing
end;

Edited by: Panagiotis Drivilas on Apr 4, 2009 4:17 PM

Edited by: Panagiotis Drivilas on Apr 4, 2009 4:18 PM
0
Panagiotis
4/4/2009 11:18:23 PM
> {quote:title=Panagiotis Drivilas wrote:}{quote}
> > {quote:title=jocke forslund wrote:}{quote}
> > I've done some searching on the web, and i can't seem to find any answer to the problem i have.
> > The client is made in c++ using winsock send & recieve.
> > 
> > The server is done with Indy IdTCPServer component.
> > When the winsock client connects, IdTCPServer get knowledge of it.
> > However, when the winsock client sends a chararray with the function send(), nothing gets parsed in IdTCPServer.Execute.
> > I know the client works, since i built a winsock testserver for the occation.
> > However when using Acontext.Connection.IOHandler.ReadLn it does not.
> > Is it known that Indy vs winsock base does not work? And does anyone know why the string never gets to the Execute part?
> > Is there a way to fix it?
> > 
> > Kind Regards
> 
> If you design the protocol use something like this:
> 1. Make a packet on client with the following:
> [size header][packet type][actual data]
> Depending the number of bytes in size header you will have (I assume packet type to be 1 byte):
> a. Byte = 255-(1 byte for size header)-(1 byte for packet type), 253 bytes for data
> b. Word = 65535-(2 byte for size header)-(1 byte for packet type), 65532 bytes for data
> c. DWord = 4294967295-(4 byte for size header)-(1 byte for packet type), 4294967290 bytes for data
> I use DWord, anyway you can drop connection if the client tries to send over some number of bytes to be secure.
> 2. On server execute you call our TClient.DoExecute procedure and loop reading data from client. When you read from client, lets say 123 bytes with:
> FSocket.ReadBytes(SomeBuffer, 123, False);
> ...Some other code...
>  the code will not continue after ReadBytes and it will wait until ReadBytes fill SomeBuffer (a TBytes type) with 123 bytes. After that it will continue executing "...Some other code...".
> 3. Server will read n bytes depending of the size header, so it will read 4 bytes (a DWord). This will be the size for your actual data.
> 4. Server will read one byte or more for the packet type, so you can have different actions on the packet depending the packet type.
> 5. Action will will read the remaining bytes, the actual data, from the client and process them.
> 
> My Execute procedure I use for a project:
> procedure TClient.DoExecute;
> var
>   Buffer: TBytes;
>   size, sizeNoHeader: Cardinal;
> 
>   packetType: Byte;
> begin
>   //[size    ][type][Data]
>   //[Cardinal][Byte][Data]
>   SetLength(Buffer, 4);
> 
>   while Connected and (not FThread.Terminated) do
>   begin
>     FSocket.ReadBytes(Buffer, 4, False); // read 4 bytes from client to get the packet size
>     size := PCardinal(@Buffer[0])^;
>     //OutputDebugString( PWideChar(Format('DoExecute ReadBytes -> Size: %d', [size])) );
> 
>     sizeNoHeader := size - 4;
>     if sizeNoHeader <= 0 then
>     begin
>       Exit;
>     end;
> 
>     FSocket.ReadBytes(Buffer, 1, False); // read 1 byte from client for packet type
>     packetType := Buffer[0];
>     case packetType of
>       0: OnPacketType0(sizeNoHeader - 1); // read the rest bytes and do some action
>       1: OnPacketType1(sizeNoHeader - 1); // read the rest bytes and do some action
>       2: OnPacketType2(sizeNoHeader - 1); // read the rest bytes and do some action
>     else
>       Disconnect;
> 
>       //OutputDebugString( PWideChar(Format('-> DoExecute unknown packetType: %d', [packetType])) );
>     end;
>   end;
> end;
> 
> procedure TClient.OnPacketType0(const Size: Cardinal);
> var
>   Buffer: TBytes;
> 
>   DataW: String;
> begin
>   FSocket.ReadBytes(Buffer, Size, False);
> 
>   // since you send a string
>   // if you haven't added zero termination on the client increase the Buffer by SizeOf(Char)
>   SetLength(Buffer, Length(Buffer) + SizeOf(Char));
>   // get our string
>   DataW := PWideChar(@Buffer[0]);
>   // do some other processing
> end;
> 
> Edited by: Panagiotis Drivilas on Apr 4, 2009 4:17 PM
> 
> Edited by: Panagiotis Drivilas on Apr 4, 2009 4:18 PM

Correct me if im wrong, but that does not seem to be the Execute function to use for TIdTCPServer.
That more looks like a winsock server example, i'd wish to use TIdTCPServer as said :)
And FSocket? Im not at home atm, but from the looking of things that does not match up to what im requesting.

EDIT:
Maybe that was the old Indy versions, looked it up :)

Edited by: jocke forslund on Apr 4, 2009 6:49 PM

Update:

Toyed around a little with the ReadLn function, changing it to
cmd:=Acontext.Connection.IOHandler.ReadLn(#0,1);

made it work for some reason, even though im not sure why, and another funny thing is, if i send the correct cmd, it will disconnect the client.
However if its wrong, it does not. Allthough the code does look the same fo disconnect the user >_>
Any idea why ReadLn(#0,1) makes things work?

Edited by: jocke forslund on Apr 4, 2009 7:37 PM

UPDATE2:

cmd:=AContext.Connection.IOHandler.ReadLn(CHAR0, 1, -1, TIdencoding.en8bit);

Seems todo the trick, not sure why allthough =/

Edited by: jocke forslund on Apr 4, 2009 8:32 PM
0
jocke
4/5/2009 3:32:25 AM
> {quote:title=jocke forslund wrote:}{quote}
> Correct me if im wrong, but that does not seem to be the Execute function to use for TIdTCPServer.
> That more looks like a winsock server example, i'd wish to use TIdTCPServer as said :)
> And FSocket? Im not at home atm, but from the looking of things that does not match up to what im requesting.
> 
> EDIT:
> Maybe that was the old Indy versions, looked it up :)
> 
> Edited by: jocke forslund on Apr 4, 2009 6:49 PM
> 
> Update:
> 
> Toyed around a little with the ReadLn function, changing it to
> cmd:=Acontext.Connection.IOHandler.ReadLn(#0,1);
> 
> made it work for some reason, even though im not sure why, and another funny thing is, if i send the correct cmd, it will disconnect the client.
> However if its wrong, it does not. Allthough the code does look the same fo disconnect the user >_>
> Any idea why ReadLn(#0,1) makes things work?
> 
> Edited by: jocke forslund on Apr 4, 2009 7:37 PM
> 
> UPDATE2:
> 
> cmd:=AContext.Connection.IOHandler.ReadLn(CHAR0, 1, -1, TIdencoding.en8bit);
> 
> Seems todo the trick, not sure why allthough =/
> 
> Edited by: jocke forslund on Apr 4, 2009 8:32 PM

My mistake, I pasted the client code.
Here is the proper code:
unit Server;

interface

uses
  Windows, SysUtils, Messages, Classes, IdContext, IdTCPServer;

type
  TServer = class(TIdTCPServer)
  protected
    procedure ServerExecute(AContext: TIdContext);
    procedure ServerConnect(AContext: TIdContext);
    procedure ServerDisconnect(AContext: TIdContext);
  public
    constructor Create(AOwner: TComponent);

    procedure Activate;
    procedure Deactivate;
  end;

procedure Register;

implementation

uses
  ServerClientThread;

procedure Register;
begin
  RegisterComponents('Mine', [TServer]);
end;

{ TServer }

procedure TServer.Deactivate;
begin
  Active := False;
end;

procedure TServer.ServerConnect(AContext: TIdContext);
var
  fClientThread: TClientThread;
begin
  fClientThread := TClientThread.Create(AContext);
  AContext.Data := fClientThread;
  fClientThread.OnConnection;
end;

procedure TServer.ServerDisconnect(AContext: TIdContext);
var
  fClientThread: TClientThread;
begin
  fClientThread := TClientThread(AContext.Data);
  fClientThread.OnDisconnection;
end;

procedure TServer.ServerExecute(AContext: TIdContext);
var
  fClientThread: TClientThread;
begin
  fClientThread := TClientThread(AContext.Data);
  if Assigned(fClientThread) then
    fClientThread.DoExecute(AContext);
end;

procedure TServer.Activate;
begin
  Active := True;
end;

constructor TServer.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  MaxConnections := 1;
  DefaultPort := 5000;

  OnExecute := ServerExecute;
  OnConnect := ServerConnect;
  OnDisconnect := ServerDisconnect;
end;

end.

ServerClient:
unit ServerClientThread;

interface

uses
  Windows, SysUtils, Classes, 
  IdGlobal, IdContext, IdTCPConnection, IdIOHandlerSocket;

type
  TClientThread = class
  private
    FContext: TIdContext;
    FConnection: TIdTCPConnection; 
    FSocket: TIdIOHandlerSocket;


    procedure OnStart;
    procedure OnStop;
    procedure OnUpdateRequest;
    procedure Start;
  public
    constructor Create(AContext: TIdContext);
    destructor Destroy; override;

    procedure DoExecute(AContext: TIdContext);

    procedure OnConnection;
    procedure OnDisconnection;
  end;

implementation

{ TClientThread }

constructor TClientThread.Create(AContext: TIdContext);
var
  key: TBytes;
begin
  inherited Create;

  FContext := AContext;
  FConnection := FContext.Connection;
  FSocket := FConnection.Socket;
end;

destructor TClientThread.Destroy;
begin
  inherited Destroy;
end;

procedure TClientThread.DoExecute(AContext: TIdContext);
var
  Buffer: TBytes;
  size, sizeNoHeader: Cardinal;

  packetType: Byte;
begin
  while (FConnection.Connected) do begin
    SetLength(Buffer, 4);
    FSocket.ReadBytes(Buffer, 4, False);
    size := PCardinal(@Buffer[0])^;

    //OnUpdateRequest; Exit;

    sizeNoHeader := size - 4;
    if sizeNoHeader <= 0 then begin
      Exit;
    end;

    FSocket.ReadBytes(Buffer, 1, False);
    packetType := Buffer[0];
    case packetType of
      0: OnStart;
      1:
       begin
        OnStop;

        FConnection.Disconnect;
       end;
      2: OnUpdateRequest;
    else
      OutputDebugString( PWideChar(Format('Unknown Opcode: %d', [packetType])) );
    end;
  end;
end;

procedure TClientThread.OnConnection;
begin
  OnStart;

  Start;
end;

procedure TClientThread.OnDisconnection;
begin
  OnStop;
end;

procedure TClientThread.OnStart;
begin
  // Server created a new client...
end;

procedure TClientThread.OnStop;
begin
  // Server is closing down client...
end;

procedure TClientThread.OnUpdateRequest;
begin
  // Send server status
end;

procedure TClientThread.Start;
begin
  // Send logo
end;

end.

Edited by: Panagiotis Drivilas on Apr 5, 2009 12:39 AM
0
Panagiotis
4/5/2009 7:40:16 AM
<jocke forslund> wrote in message news:101560@forums.codegear.com...

> The server is done with Indy IdTCPServer component.
> When the winsock client connects, IdTCPServer get knowledge of it.
> However, when the winsock client sends a chararray with the function 
> send(),
> nothing gets parsed in IdTCPServer.Execute.

What does your server code look like?  What kind of data is the client 
sending?

> I know the client works, since i built a winsock testserver for the 
> occation.
> However when using Acontext.Connection.IOHandler.ReadLn it does not.

Is the client sending a LF character?

> Is it known that Indy vs winsock base does not work?

More likely, you are simply using Indy incorrectly.  Please show your actual 
code for both client and server.

-- 
Remy Lebeau (TeamB)
0
Remy
4/6/2009 3:12:00 AM
> {quote:title=Remy Lebeau (TeamB) wrote:}{quote}
> <jocke forslund> wrote in message news:101560@forums.codegear.com...
> 
> > The server is done with Indy IdTCPServer component.
> > When the winsock client connects, IdTCPServer get knowledge of it.
> > However, when the winsock client sends a chararray with the function 
> > send(),
> > nothing gets parsed in IdTCPServer.Execute.
> 
> What does your server code look like?  What kind of data is the client 
> sending?
> 
> > I know the client works, since i built a winsock testserver for the 
> > occation.
> > However when using Acontext.Connection.IOHandler.ReadLn it does not.
> 
> Is the client sending a LF character?
> 
> > Is it known that Indy vs winsock base does not work?
> 
> More likely, you are simply using Indy incorrectly.  Please show your actual 
> code for both client and server.
> 
> -- 
> Remy Lebeau (TeamB)

TClientinfo = class(TIdContext)
 public
  IP: String;
  procedure SendResponse(const Clientip: String;
  const AResponse: String);
 end;
 
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
clientcmd,checkcmd,from:string;
begin
//the request from the client is received in the request var
clientcmd:=Acontext.Connection.IOHandler.ReadLn;
checkcmd:=clientcmd;
from:= acontext.Connection.Socket.Binding.PeerIP;
  //Check thecommand the client sent
  if checkcmd='thisisthecorrectstring' then
  begin
    //Send the response to the client...
    TClientinfo(AContext).SendResponse(sentfrom,StrTobase64('thisistheanswer'));
    TClientinfo(AContext).Connection.Disconnect;
      end
  else
  if (checkcmd<>'thisisthecorrectstring') and (length(checkcmd) <> 18) then
  begin
  TClientinfo(AContext).Connection.Disconnect;
  failedtries := failedtries + 1;
 
  end
  else
  if (checkcmd<>'thisisthecorrectstring') and (length(checkcmd) = 18) then
  begin
  TClientinfo(AContext).Connection.Disconnect;
  failedtries := failedtries + 1;
  end
  else
  begin
  TClientinfo(AContext).Connection.Disconnect;
  failedtries := failedtries + 1;
  end;
  failedlabel.Caption := 'Failed Attempts: '+ IntToStr(failedtries);
 
 
end;
 
procedure TClientInfo.SendResponse(const Clientip: String;
const AResponse: String);
begin
              Connection.IOHandler.WriteLn(AResponse);
end;

The client sends a pure charray like "thisisastringcmddosomething"

Which turns out to be a Char0.


*Client:*
-----
function ArrToStr(Ar: Array of Byte): String;
var
  Tmp: PWideChar;
  i: Integer;
begin
  Tmp:='';
  for i:=Low(Ar) to High(Ar) do
  Result:=Result + Chr(Ar[i]);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  WSAData : TWSAData;
  SockAddr : TSockAddr;
  ClientSocket : TSocket;
  host: SOCKADDR_IN;
  HostEnt: PHostEnt;
  MemoryArray: array[0..25] of AnsiChar;
  RecvArray: array[0..255] of Byte;
  str: shortstring;
  recvstr: string;
  ret: integer;
  I: Integer;
begin
  If WSAStartUp(257,WSAData) <> 0 Then
    begin
    MessageBox(0,'Initialization of winsock failed.','Error',MB_OK Or MB_ICONERROR);
    Exit;
  end;

  host.sin_family := AF_INET;
  host.sin_port := htons(61451);
  host.sin_addr.S_addr := inet_addr('192.168.1.2');

  ClientSocket := Socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
  If ClientSocket = INVALID_SOCKET Then
    begin
    MessageBox(0,'ServerSocket creation failed.','Error',MB_OK Or MB_ICONERROR);
    WSACleanUp;
    Exit;
  end;

  If Connect(ClientSocket,host,SizeOf(host)) <> 0 Then
    begin
    MessageBox(0,'Failed to connect to remote computer.','Error',MB_OK Or MB_ICONERROR);
    WSACleanUp;
    Exit;
  end
  else
  begin
    Memo1.Lines.Add('I connected fine..')
  end;
  FillChar(MemoryArray, SizeOf(MemoryArray), 0);
  str := 'thisisacommand';
  Move(str[1], MemoryArray, 25);
 send(ClientSocket,MemoryArray,SizeOf(MemoryArray),0);
 recv(ClientSocket,RecvArray,SizeOf(RecvArray),0);
 Memo1.Lines.Add(ArrToStr(RecvArray));
 closesocket(ClientSocket);
end;

Edited by: jocke forslund on Apr 6, 2009 4:56 AM
0
jocke
4/6/2009 11:57:37 AM
Reply:

Similar Artilces:

Delphi 4 to Delphi 2009
Hello, Thanks to all who answered my previous question. That was a great help. And atlast our client agreed to upgrade our delphi version from 4 to Delphi 2009. *Sigh*. But before that, I need to give the estimation and cost regarding the migration to delphi 2009. Can anyone tell me is there any tool to migrate from delphi 4 to delphi 2009 or just I need to compile our Delphi 4 application in Delphi 2009. I have read from the delphi 2009 feature matrix that Delphi 1 through Delphi 2007 import is possible in delphi 2009. But i am not that sure considering the size of our application. ...

Delphi 5 To Delphi 2009
I upgraded to Delphi 2009 from D5. The install says I can install Delphi and/or C++. Delphi installed OK but I see nothing of C++. What am I missing or does my upgrade not include C++? Thanks It depends on what you bought. If you bought Delphi 2009 only, that's what you get. If you bought Delphi 2009 and C++ Builder 2009 you get both. My guess is you got Delphi 2009 only. The simplest way to verify is look your invoice - it should say I would think. You could also go to members.embarcadero.com, login, then click on my registered products. There will be a textual description of...

is there a Delphi 2007
Would be nice to have a bundle of the latest Delphi packages. Gilbert Padilla wrote: > Would be nice to have a bundle of the latest Delphi packages. > I expect Delphi 2007 will only be on sale until the full RAD Studio 2009 edition is published, including Delphi 2009.net. W ...

Delphi 2007 to Delphi 2009 Conversion
CharArrayPtr = ^CharArray; CharArray = array[0..MaxInt-1] of Char; How to convert to Delphi 2009? Bill Bill Miller wrote: > CharArrayPtr = ^CharArray; > CharArray = array[0..MaxInt-1] of Char; > > How to convert to Delphi 2009? > > Bill it depends heavelly on how it is used fearther down in your project and what you want to convert it to. I you want to simple convert the declarations ignoring UNicode altogether then the only think you have to change is the CharArray declaratin from a Char to an AnsiChar eg CharArrayPtr = ^CharArray; CharArray =...

Delphi 2009 alongside Delphi 2007
Hi all, I am about to install Delphi 2009 on the same development system as Delphi 2007, before I embark is there anything I should be aware of so as to not break my Delphi 2007 installation and projects ? Thanks JT John Taylor wrote: > Hi all, > > I am about to install Delphi 2009 on the same development system > as Delphi 2007, before I embark is there anything I should be aware > of so as to not break my Delphi 2007 installation and projects ? As long as you install into a separate folder there is no problem with the two versions getting into each other...

Upgrading to Delphi 2009 from Delphi 5
I've decided it's time to upgrade to Delphi 2009 Professional from my current Delphi 5 Professional which (according to the FAQ) makes me eligible for the upgrade pricing. However, I'd just like to clarify how this process works. My concern is that my Delphi 5 is not registered on the CodeGear site and this doesn't seem to be possible as far as I can tell. When installing the trial I noticed that Delphi 2009 registers itself with your CodeGear account so does this mean that the previous version must be registered there to verify you own a Professional edition? I plan to o...

Delphi 7 to Delphi 2009 conversion
Hello group, What do I need to do to comile the following code in D2009. Compiler error after the Else E2010: Incompatible Types 'AnsiChar' and 'Char' if isUnicode then SearchHandle := FindFirstFilew( PWideChar( fn ), FindDataW ) else SearchHandle := FindFirstFile( PAnsiChar( Ansistring( fn ) ), FindDataA ); <<<<<compiler error in the above line >>>>>>>>>>> Regards, Bryan > What do I need to do to comile the following code in D2009. > Compiler error after the Else > E2010: Incompati...

Convert Delphi 7 to Delphi 2009 [Edit]
Hi! Please, I have a code done in Delphi 7... Now I want to convert Delphi 7 to Delphi 2009 but I'm having problems when compile the code. Error message: +[DCC Fatal Error] Far.dpr(9): F2063 Could not compile used unit 'System.pas'+ Please can somebody help me? Source Download (349KB): http://rapidshare.com/files/256191328/FileManager.rar.html Mirror Source Download: http://www.megaupload.com/?d=12GYLPT0 Password: delphi Thank u so much! (sorry for my bad english, it is not my native language) Edited by: loquax loquax on Jul 15, 2009 12:24 PM Sorry, bu...

ShareMem Delphi 6 --> Delphi 2009
I have just upgraded from Delphi 6 to Delphi 2009. My software uses about 20 files, plus literally dozens more plug-ins. Every project has ShareMem as its first unit and borlndmm.dll is distributed with the software. I am aware that the Borland Memory Manager was replaced to use FastMM quite some time ago. Will I have to rebuild every EXE and DLL in DElphi 2009 that uses ShareMem, or will supplying the new borlndmm.dll be enough? i.e. I would like to just update the main application EXEs and DLLs, but leave the plug-ins alone. Will this work? Thanks, Jason. -- Jason Sweby So...

ShareMem Delphi 6 --> Delphi 2009
I have just upgraded from Delphi 6 to Delphi 2009. My software uses about 20 files, plus literally dozens more plug-ins. Every project has ShareMem as its first unit and borlndmm.dll is distributed with the software. I am aware that the Borland Memory Manager was replaced to use FastMM quite some time ago. Will I have to rebuild every EXE and DLL in DElphi 2009 that uses ShareMem, or will supplying the new borlndmm.dll be enough? i.e. I would like to just update the main application EXEs and DLLs, but leave the plug-ins alone. Will this work? Thanks, Jason. -- Jason Sweby ...

Question about Delphi 2009 vs Delphi 7
Hi, I was wondering if any of you can point me to a URLs that show the most important improvements between these versions of Delphi. The objective is convincing the powers-that-pay-the-bills that moving to D2009 (that we'd have to purchase) is a better idea than moving to D7 (for which we have licenses). Fire at will! -- Saluti, Alessandro Federici ------------------------------- "I have been through some terrible things in my life, some of which actually happened." (Mark Twain) Alessandro Federici wrote: > Hi, > I was wondering if any of yo...

ShareMem Delphi 6 --> Delphi 2009
I have just upgraded from Delphi 6 to Delphi 2009. My software uses about 20 files, plus literally dozens more plug-ins. Every project has ShareMem as its first unit and borlndmm.dll is distributed with the software. I am aware that the Borland Memory Manager was replaced to use FastMM quite some time ago. Will I have to rebuild every EXE and DLL in DElphi 2009 that uses ShareMem, or will supplying the new borlndmm.dll be enough? i.e. I would like to just update the main application EXEs and DLLs, but leave the plug-ins alone. Will this work? Thanks, Jason. -- Jason Sweby ...

Can delphi 2009 and delphi 7 be on the same computer?
Can I install and run delphi 2009 and delphi 7 separately on the same computer or will they interfer with each other? I have delpi 7 already so do I need to choose a new folder (not c:\Borland) when installing 2009? Lorne Anderson wrote: > Can I install and run delphi 2009 and delphi 7 separately on the same > computer or will they interfer with each other? > > I have delpi 7 already so do I need to choose a new folder (not c:\Borland) > when installing 2009? It works fine. You usually want to install the older version first. As for folders, the root folde...

Why does this work fine in Delphi 2009, but not in Delphi 2010
I've been racking my head trying to figure this out and can't understand what is wrong, TFileStream.ReadComponentRes fails when I try to read a component containing a record, it works fine in Delphi 2009 and Delphi 2007, but fails with Delphi 2010 Here is the unit source and DFM *+//UnitSource+* unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TThresholdMode = (tm0,tm1,tm2,tm3,tm4,tm5); TThreshold = Record Mode:TThresholdMode; Filter,Start,Stop:Integer; end; ...

Code Porting
Hi people, Basically, I am moving an app from Delphi 5 to Delphi 2009 which is all great (yeah right!) and I am having a couple of issues with some thirdparty components that we have the source code for. Being that I wanted to make the task as easy as possible, I was able to download the component in Delphi 2007 format. I have now managed to port that to 2009 so it compiles only with warnings and no errors. So all is good at this moment. Now I am trying to install the component into the IDE by using the install menu option from the project manager. This is where I run into errors. ...

Web resources about - Delphi 2009 - IdTCPServer1.Execute +Winsock.send = nothing - embarcadero.delphi.tools

Resources last updated: 12/17/2015 6:18:45 AM