Главная страница
    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.781 c
15-1153766168
Степан
2006-07-24 22:36
2006.08.20
RLINK32: Error opening file "Unit_MainForm.dpr" ?!?!?!


15-1153472316
Strate
2006-07-21 12:58
2006.08.20
Тест браузеров


4-1145854121
pheonix
2006-04-24 08:48
2006.08.20
как узнать имя пользователя под которым загружена виндовс?


1-1152464349
iNV
2006-07-09 20:59
2006.08.20
Работа с XML как с реестром., Запись чтение.


1-1152169596
RDS
2006-07-06 11:06
2006.08.20
Кнопка приложения на панели задач





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский