|
#1
|
|||
|
|||
uudeview.dll
Здравствуйте.
Есть такая замечательная библиотека uudeview.dll На сайте разработчика есть ее исходные коды(си), там же есть документация... Я использую ее в своей программе, пишу на Delphi. Все работает кроме одной функции. UUSetBusyCallback вот часть моего кода: Код:
type TUUProgress = record action:integer; curfile:array [1..256] of char; partno:integer; numparts:integer; fsize:int64; percent:integer; fofset:int64; totsize:int64; end; type PTUUProgress=^TUUProgress; function UUSetBusyCallback(p:Pointer; f:TCallBackBusyFunction; msec:int64): integer stdcall; external 'uudeview.dll'; function BusyCallBack(p:Pointer;pr:PTUUProgress):integer; var test:string; begin Result:=0; test:=Pchar(p); Log(test); /// pr??? end; begin .... UUSetBusyCallback(PChar('Test'),BusyCallBack,500); .... end; Начинаю декодировать.. вызывается BusyCallBack, срабатывает Log с текстом "Test". Функция вызывается все отлично. Но прочитать "v:PTUUProgress" не получается. При проходе дебагерром, значение любого поля pr: "Inaccessible value" Помогите пожалуйста, бьюсь не первый день. В интернете есть несколько примеров реализаций но они все то ли на си то ли на php, а вот на Delphi работать отказывается... Последний раз редактировалось Admin, 17.02.2012 в 15:30. |
#2
|
||||
|
||||
Код:
function BusyCallBack(p:Pointer;pr:PTUUProgress):integer; var test:string; begin Result:=0; test:=Pchar(p); Log(test); if pr^.action=0 then ... end; ну и наверное: function BusyCallBack(p:Pointer;pr:PTUUProgress):integer; stdcall; Пишу программы за еду. __________________ |
#3
|
|||
|
|||
Цитата:
Помогло! Огромное спасибо добрый человек!! |
#4
|
|||
|
|||
Помогло но почему-то опять сломалось(
я написал Код:
function BusyCallBack(p:Pointer;pr:PTUUProgress):integer; stdcall; ета функция должна возвращать 0 если все ок или не ноль чтобы отменить операцию. код функции сейчас минимальный Код:
begin Result:=0; end; если я убираю stdcall то декодирование не прерывается(а также нормально прерывается если я пишу Result:=1; ), но PTUUProgress недоступна. если я ставлю stdcall то осуществляется первый вход в BusyCallBack, в PTUUProgress нормальные правильные данные(в p:Pointer тоже) но на етом все заканчивается, внутри dll возникает ошибка "Access violation at address 00000005. Read of address 00000005" и процесс декодирования прерывается |
#5
|
|||
|
|||
исправил stdcall на cdecl заработало спасибо еще раз
|