C'est un composant dont t'as pas le code ? Parce que sinon les composants Delphi se compilent en Builder sans probleme en général.
Sinon pour ton stream, il reste la solution de passer un pointeur vers un bloc mémoire, plus basique que de passer tout l'objet TStream.
Code venant d'AMC : (mais du vieux, donc c'est peut-être du bricolage pour rien ou du code pas très propre)
Code :
function TMovie.SaveToMemory: THandle; var Stream: TMemoryStream; DataPtr: Pointer; begin Stream := TMemoryStream.Create; try WriteData(Stream); Stream.Seek(0, soFromBeginning); Result := GlobalAlloc(GMEM_MOVEABLE, Stream.Size); if Result <> 0 then begin DataPtr := GlobalLock(Result); if DataPtr <> nil then begin Move(Stream.Memory^, DataPtr^, Stream.Size); end; end; finally Stream.Free; end; end; class procedure TMovie.FreeMemory(DataHandle: THandle; OnlyUnlock: Boolean = False); begin if DataHandle <> 0 then begin GlobalUnlock(DataHandle); if not OnlyUnlock then GlobalFree(DataHandle); end; end; procedure TMovie.LoadFromMemory(DataHandle: THandle); var DataPtr: Pointer; DataSize: Integer; Stream: TMemoryStream; begin if DataHandle <> 0 then begin DataPtr := GlobalLock(DataHandle); if DataPtr <> nil then begin Stream := TMemoryStream.Create; try DataSize := GlobalSize(DataHandle); Stream.SetSize(DataSize); Move(DataPtr^, stream.Memory^, DataSize); Stream.Seek(0, soFromBeginning); ReadData(Stream); finally Stream.Free; GlobalUnlock(DataHandle); end; end; end; end;
|
Là je copiais le stream vers le bloc mémoire réservé, mais il y a peut-être moyen de faire le même genre de choses en récupérant directement le pointeur "data" du stream, si c'est une DLL appartement au soft ça devrait marcher vu qu'ils ont le même espace mémoire je suppose.
Message édité par antp le 08-07-2007 à 00:39:40
---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire