5 votes

Comment transmettre un flux Delphi à une DLL c/c++ ?

Est-il possible de passer un flux Delphi (descendant de TStream) à une DLL écrite en c/c++ ? La DLL sera écrite en Microsoft c/c++. Si ce n'est pas possible, que diriez-vous d'utiliser C++ Builder pour créer la DLL ? Sinon, existe-t-il des classes Stream (FIFO) qui peuvent être partagées entre Microsoft C/C++ et Delphi ?

Merci !

13voto

Ken White Points 73213

Vous pouvez le faire en utilisant IStream y TStreamAdapter . Voici un exemple rapide (testé dans D2007 et XE2) :

uses
  ActiveX;

procedure TForm1.DoSomething;
var
  MemStream: TMemoryStream;
  ExchangeStream: IStream;
begin
  MemStream := TMemoryFile.Create;
  try
    MemStream.LoadFromFile('C:\Test\SomeFile.txt');
    MemStream.Position := 0;
    ExchangeStream := TStreamAdapter.Create(MemStream) as IStream;
    // Pass ExchangeStream to C++ DLL here, and do whatever else
  finally
    MemStream.Free;
  end;
end;

Juste au cas où, si vous devez faire le chemin inverse (recevoir une IStream en C/C++), vous pouvez utiliser TOleStream pour en arriver à IStream à un Delphi TStream .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X