Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.02.2012, 15:26
ivanisimus ivanisimus вне форума
Прохожий
 
Регистрация: 17.02.2012
Сообщения: 11
Репутация: 10
Злость 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  
Старый 17.02.2012, 15:32
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
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  
Старый 17.02.2012, 16:15
ivanisimus ivanisimus вне форума
Прохожий
 
Регистрация: 17.02.2012
Сообщения: 11
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
ну и наверное:

function BusyCallBack(p:Pointer;pr:PTUUProgress):integer; stdcall;


Помогло! Огромное спасибо добрый человек!!
Ответить с цитированием
  #4  
Старый 17.02.2012, 17:31
ivanisimus ivanisimus вне форума
Прохожий
 
Регистрация: 17.02.2012
Сообщения: 11
Репутация: 10
По умолчанию

Помогло но почему-то опять сломалось(

я написал
Код:
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  
Старый 17.02.2012, 18:05
ivanisimus ivanisimus вне форума
Прохожий
 
Регистрация: 17.02.2012
Сообщения: 11
Репутация: 10
По умолчанию

исправил stdcall на cdecl заработало спасибо еще раз
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:06.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter