Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];

Вниз

работа с DLL и ее интерфейсами   Найти похожие ветки 

 
JohnnySE   (2006-07-05 11:50) [0]

Есть бинарный файл, как его прочитать и передать в dll у которой есть интерфейс IzlibEngine c методами pkCompress(Istream* lpstrmFrom, IStream* lpstrmTo) и pkDecompress(Istream* lpstrmFrom, IStream* lpstrmTo)


 
guav ©   (2006-07-05 13:53) [1]

Использовать TStreamAdapter для TFileStream


 
JohnnySE   (2006-07-05 17:04) [2]

unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ActiveX, StdCtrls, ZLENGINELib_TLB;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
izl : izlibEngine;
iw : iUnknown; ff : Text;
const zG : tGUID = "{C5276425-F299-11D0-8149-004095E1F439}";
zlibG : tGuid = "{C5276436-F299-11D0-8149-004095E1F439}";
izg : tGuid = "{C5276445-F299-11D0-8149-004095E1F439}";
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var
FileStreamIn: TFileStream;
FileStreamOut: TFileStream;
StreamIn: IStream;
StreamOut: IStream;
FileNameIn: String;
FileNameOut: String;
begin // читаем файл
// НАЗНАЧАЕМ ПУТЬ К ФАЙЛУ
FileNameIn:= "C:\sea\in.bin";
FileNameOut:= "C:\sea\Out.txt";
FileStreamIn := TFileStream.Create(FileNameIn, fmCreate);
FileStreamOut := TFileStream.Create(FileNameOut, fmCreate);
StreamIn := TStreamAdapter.Create(FileStreamIn, soReference);
StreamOut := TStreamAdapter.Create(FileStreamOut, soReference);
izl.pkdecompress(StreamIn as IStream,StreamOut as IStream);
... здесь вылетает ошибка.
/////////////////////////////////////////////
в ZLENGINELib_TLB
IzlibEngine = interface(IUnknown)
["{C5276445-F299-11D0-8149-004095E1F439}"]
procedure pkDecompress(const lpstrmFrom, lpstrmTo: IStream); safecall;
end;


 
guav ©   (2006-07-05 18:03) [3]

> ... здесь вылетает ошибка.

Какая ?


> izl : izlibEngine;

Как осуществляется присвоение этой переменной значения ?
ZLENGINELib_TLB - сгенерированный по команде Import Type Library ? Тогда там должен быть класс CozlibEngine, и izl должен быть инициализирован так: izl := CozlibEngine.Create;


> FileStreamIn := TFileStream.Create(FileNameIn, fmCreate);

Для открытия для чтения должно быть fmOpenRead


 
JohnnySE   (2006-07-06 09:15) [4]

За fmOpenRead - спасибо, совсем заработался
Ошибка
Project Project2.exe raised exception class EAccessViolation with message "Access violation at address 0045EC9E in module "Project2.exe". Read of address 00000000".

вот текст ZLENGINELib_TLB

unit ZLENGINELib_TLB;

{ This file contains pascal declarations imported from a type library.
 This file will be written during each import or refresh of the type
 library editor.  Changes to this file will be discarded during the
 refresh process. }
{ zlEngine 1.0 Type Library }
{ Version 1.0 }
interface
uses Windows, ActiveX, Classes, Graphics, OleCtrls, StdVCL;
const
 LIBID_ZLENGINELib: TGUID = "{C5276436-F299-11D0-8149-004095E1F439}";
const
{ Component class GUIDs }
 Class_zlibEngine: TGUID = "{C5276425-F299-11D0-8149-004095E1F439}";
 Class_jpegEngine: TGUID = "{E196D997-FB8C-11D0-AE1D-D9180F4C4641}";
 Class_tiffEngine: TGUID = "{E196D999-FB8C-11D0-AE1D-D9180F4C4641}";
type
{ Forward declarations: Interfaces }
 IzlibEngine = interface;
 ISequentialStream = interface;
 IjpegEngine = interface;
 ItiffEngine = interface;
{ Forward declarations: CoClasses }
 zlibEngine = IzlibEngine;
 jpegEngine = IjpegEngine;
 tiffEngine = ItiffEngine;
 _LARGE_INTEGER = record
   QuadPart: Comp;
 end;
 _FILETIME = record
   dwLowDateTime: UINT;
   dwHighDateTime: UINT;
 end;
 _ULARGE_INTEGER = record
   QuadPart: Largeuint;
 end;
 tagSTATSTG = record
   pwcsName: PWideChar;
   atype: UINT;
   cbSize: _ULARGE_INTEGER;
   mtime: _FILETIME;
   ctime: _FILETIME;
   atime: _FILETIME;
   grfMode: UINT;
   grfLocksSupported: UINT;
   clsid: TGUID;
   grfStateBits: UINT;
   reserved: UINT;
 end;
{ IzlibEngine Interface }
 IzlibEngine = interface(IUnknown)
   ["{C5276445-F299-11D0-8149-004095E1F439}"]
   procedure pkZip(pszCommandLine: PWideChar); safecall;
   procedure pkUnzip(pszCommandLine: PWideChar); safecall;
   procedure pkCompress(const lpstrmFrom, lpstrmTo: IStream); safecall;
   procedure pkDecompress(const lpstrmFrom, lpstrmTo: IStream); safecall;
 end;
 ISequentialStream = interface(IUnknown)
   ["{0C733A30-2A1C-11CE-ADE5-00AA0044773D}"]
   procedure RemoteRead(out pv: Shortint; cb: UINT; out pcbRead: UINT); safecall;
   procedure RemoteWrite(var pv: Shortint; cb: UINT; out pcbWritten: UINT); safecall;
 end;
{ IjpegEngine Interface }
 IjpegEngine = interface(IUnknown)
   ["{E196D996-FB8C-11D0-AE1D-D9180F4C4641}"]
   procedure CreateDIBFromJPEG(pszPathName: PWideChar; var hBitmap: SYSUINT); safecall;
 end;
{ ItiffEngine Interface }
 ItiffEngine = interface(IUnknown)
   ["{E196D998-FB8C-11D0-AE1D-D9180F4C4641}"]
   procedure CreateDIBFromTIFF(pszPathName: PWideChar; var hBitmap: SYSUINT); safecall;
 end;
{ zlibEngine Class }
 CozlibEngine = class
   class function Create: IzlibEngine;
   class function CreateRemote(const MachineName: string): IzlibEngine;
 end;
{ jpegEngine Class }
 CojpegEngine = class
   class function Create: IjpegEngine;
   class function CreateRemote(const MachineName: string): IjpegEngine;
 end;
{ tiffEngine Class }
 CotiffEngine = class
   class function Create: ItiffEngine;
   class function CreateRemote(const MachineName: string): ItiffEngine;
 end;
implementation
uses ComObj;
class function CozlibEngine.Create: IzlibEngine;
begin
 Result := CreateComObject(Class_zlibEngine) as IzlibEngine;
end;
class function CozlibEngine.CreateRemote(const MachineName: string): IzlibEngine;
begin
 Result := CreateRemoteComObject(MachineName, Class_zlibEngine) as IzlibEngine;
end;
class function CojpegEngine.Create: IjpegEngine;
begin
 Result := CreateComObject(Class_jpegEngine) as IjpegEngine;
end;
class function CojpegEngine.CreateRemote(const MachineName: string): IjpegEngine;
begin
 Result := CreateRemoteComObject(MachineName, Class_jpegEngine) as IjpegEngine;
end;
class function CotiffEngine.Create: ItiffEngine;
begin
 Result := CreateComObject(Class_tiffEngine) as ItiffEngine;
end;
class function CotiffEngine.CreateRemote(const MachineName: string): ItiffEngine;
begin
 Result := CreateRemoteComObject(MachineName, Class_tiffEngine) as ItiffEngine;
end;
end.


 
guav ©   (2006-07-06 14:00) [5]

> Ошибка
> Project Project2.exe raised exception class EAccessViolation
> with message "Access violation at address 0045EC9E in module
> "Project2.exe". Read of address 00000000".

ошибка свидетельствует об обращении к нулевому адресу, что обычно происходит при попытке раобты с нулевым указателем.

> izl.pkdecompress(StreamIn as IStream,StreamOut as IStream);

т.к. StreamIn и StreamOut присваиваются выше, похоже что izl = nil

см. [3] guav ©   (05.07.06 18:03)

> izl должен быть инициализирован так: izl := CozlibEngine.Create;


 
JohnnySE   (2006-07-06 15:23) [6]

СПАСИБО. Все получилось



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.039 c
2-1154202701
ronyn
2006-07-29 23:51
2006.08.20
pchar pansichar


15-1153773781
Axis_of_Evil
2006-07-25 00:43
2006.08.20
ПО для КПК


1-1151967710
MNC
2006-07-04 03:01
2006.08.20
фокус на первый символ в РичЕдит


3-1150112567
Дмитрий_Б
2006-06-12 15:42
2006.08.20
Скрытие повторяющихся значений в Quick Report


15-1153053677
Sergei1982
2006-07-16 16:41
2006.08.20
шлюз на Mandriva Linux





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский