|  | 
 
 | 
| 
			 
			#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 заработало спасибо еще раз |