powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка после вызова процедуры из dll
18 сообщений из 18, страница 1 из 1
Ошибка после вызова процедуры из dll
    #39939180
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Столкнулся с такой ситуацией. Есть библиотека на Си написанная. Её грузим при открытии формы. Выгружаем на Destroy.
Есть Action, в котором ищем необходимую процедуру в dll-ке и выполняем её. Но после выполнения всего кода в Action у меня вылетает циклический Access Violation на выделенной строке.
Код: pascal
1.
2.
3.
4.
5.
6.
unit System.Classes;
...
function TBasicActionLink.Update: Boolean;
begin
  Result := not FAction.Suspended and FAction.Update;
end;


В чем может быть проблема?
Заранее благодарен за конструктив.
...
Рейтинг: 0 / 0
Ошибка после вызова процедуры из dll
    #39939183
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов Юрий
В чем может быть проблема?

В декларации процедуры, например.
...
Рейтинг: 0 / 0
Ошибка после вызова процедуры из dll
    #39939191
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот кусок кода вызова процедуры из dll
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
function TfrmReestr.CheckSign(PData, PSign: TBytes; PDataLen, PSignLen: Integer; out PErrorText: string): Boolean;
{DLL_API DWORD sfVerifyData( void *Data, DWORD LenData, BYTE *Sign, DWORD LenSign, char *SignInfoXml);}
var
  LSignInfo: PAnsiChar;
  LError: Integer;
  VerifyDLL: function(Data: TBytes; LenData: Integer; Sign: TBytes;
    LenSign: Integer; SignInfoXml: PAnsiChar): Integer; stdcall;
begin
  Result := False;
  PErrorText := '';
  @VerifyDLL := nil;
  @VerifyDLL := GetProcAddress(FLibHandle, '?sfVerifyData@@YAKPEAXKPEAEKPEAD@Z');
  if @VerifyDLL <> nil then
  begin
    LError := VerifyDLL(PData, PDataLen, PSign, PSignLen, LSignInfo);
    if LError = 0 then
      Result := True
    else
      PErrorText := 'Помилка підписання даних: ' + GetErrorDesc(LError);
  end
  else // если мы  не нашли функцию в Dll
    PErrorText := 'Помилка підписання даних: функція підпису не знайдена!';
  @VerifyDLL := nil;
end;
...
Рейтинг: 0 / 0
Ошибка после вызова процедуры из dll
    #39939196
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
В декларации процедуры, например.

В чем именно? Библиотека не моя, но контакт с автором есть.
...
Рейтинг: 0 / 0
Ошибка после вызова процедуры из dll
    #39939208
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов Юрий,

Сишная функция точно stdcall? Ещё, смотрю, LSignInfo не инициализируется...
...
Рейтинг: 0 / 0
Ошибка после вызова процедуры из dll
    #39939220
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
Леонов Юрий,

Сишная функция точно stdcall? Ещё, смотрю, LSignInfo не инициализируется...


функция вроде stdcall, дополнительно спросил автора, а LSignInfo - out параметр, он и не должен инициализироваться
...
Рейтинг: 0 / 0
Ошибка после вызова процедуры из dll
    #39939226
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов Юрий
а LSignInfo - out параметр, он и не должен инициализироваться

Если он out, то почему у тебя не out?
...
Рейтинг: 0 / 0
Ошибка после вызова процедуры из dll
    #39939229
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов Юрий,


попробуйте:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var
   iSavedCW: word;
begin
   iSavedCW := Get8087CW;
   Set8087CW(iSavedCW or $7);
   try
      ... здесь вызов функции из DLL ...
   finally
      Set8087CW(iSavedCW);  
   end;



я однажды подобным образом вынужден был LoadLibrary / FreeLibrary / GetProcAddress / и все вызовы функций из либы обвязать
...
Рейтинг: 0 / 0
Ошибка после вызова процедуры из dll
    #39939236
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов ЮрийData: TBytes;

void* это совсем-совсем не TBytes.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка после вызова процедуры из dll
    #39939241
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов ЮрийLSignInfo - out параметр

Он не может быть out параметром, что-то ты напутал.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка после вызова процедуры из dll
    #39939244
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
void* это совсем-совсем не TBytes.

TBytes можно рассматривать, как нетипизированный указатель.
...
Рейтинг: 0 / 0
Ошибка после вызова процедуры из dll
    #39939246
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Леонов ЮрийData: TBytes;

void* это совсем-совсем не TBytes. Да и последний параметр сомнителен.
...
Рейтинг: 0 / 0
Ошибка после вызова процедуры из dll
    #39939249
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
TBytes можно рассматривать, как нетипизированный указатель.
В любом случае нужно память под него зарезервировать.
...
Рейтинг: 0 / 0
Ошибка после вызова процедуры из dll
    #39939251
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соколинский Борис
В любом случае нужно память под него зарезервировать.

Разумеется. Предполагается, что вызывающая сторона заботится об этом :)
...
Рейтинг: 0 / 0
Ошибка после вызова процедуры из dll
    #39939256
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,
в этот параметр возвращается xml. Все работает, тесты были успешные.
...
Рейтинг: 0 / 0
Ошибка после вызова процедуры из dll
    #39939259
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
19.03.2020 17:35, Леонов Юрий пишет:
>
> в этот параметр возвращается xml. Все работает, тесты были успешные.
>

случайности не случайны! (С)

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка после вызова процедуры из dll
    #39939260
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов Юрий
Все работает

Как выяснилось, не всё.
...
Рейтинг: 0 / 0
Ошибка после вызова процедуры из dll
    #39939265
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, точно сам лопух!
Код: pascal
1.
LSignInfo := GetMemory(4096); 

пропустил.
Вроде заработало, посмотрю дальше что будет. Всем спасибо за участие!
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка после вызова процедуры из dll
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]