Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2016, 03:52   #1
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию Accesse violation at address

Всем привет. Очень нужна помощь. Пишу библиотеку для определения хэша

Код:
Library hash_sha256;

{ Important note about DLL memory management: ShareMem must be the
  first unit in your library's USES clause AND your project's (select
  Project-View Source) USES clause if your DLL exports any procedures or
  functions that pass strings as parameters or function results. This
  applies to all strings passed to and from your DLL--even those that
  are nested in records and classes. ShareMem is the interface unit to
  the BORLNDMM.DLL shared memory manager, which must be deployed along
  with your DLL. To avoid using BORLNDMM.DLL, pass string information
  using PChar or ShortString parameters. }

uses
  System.SysUtils,
  System.Classes,
  System.Hash,
  Vcl.Dialogs;

{$R *.res}

function MyHash(AKey, AData: PAnsiChar): Pchar; stdcall;
var
  a: TArray<byte>;
  i: integer;
  s: ShortString;
begin
  try
    s:='';
    Result:='';

    try
      a:=THashSHA2.GetHMACAsBytes(String(AData), String(AKey));
    except
      on E : Exception do
         ShowMessage('Step1'+E.Message);
    end;


    try
      for i:=0 to high(a) do
        s:=s+PChar(inttohex(a[i],2));
    except
      on E : Exception do
        ShowMessage('Step2 '+E.Message+', high(a)='+IntToStr(high(a)));
    end;

    try
      Result:=Pchar(s+'');
    except
      on E : Exception do
        ShowMessage('Step3'+E.Message);
    end;

  except
    on E : Exception do
      begin
        Result:=Pchar(AnsiString(E.Message));
      end;
  end;
end;

exports MyHash name 'hash_sha256';

begin
end.
Периодически ( не всегда ) вылезает ошибка
Цитата:
Step2 Accesse violation at address 0AC95985 in module … Read of address FFFFFFFC, high(a)=31
Я уже не знаю, как с ней бороться ...

Первоначально, вместо ShortString у меня был AnsiString, но таскать с собой BORLNDMM.DLL - не вариант + ( библиотека пишется на Delphi XE 10, а сама программа написана на Delphi 7, и на сколько я знаю из-за этого может ShareMem ругаться )
-Jack- вне форума Ответить с цитированием
Старый 18.11.2016, 22:37   #2
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Ни у кого никаких идей ?
-Jack- вне форума Ответить с цитированием
Старый 18.11.2016, 22:43   #3
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

есть идея. воспользоваться дебагером, говорят крутая штука
come-on вне форума Ответить с цитированием
Старый 18.11.2016, 22:45   #4
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Научишь, как дебагером библиотеки проверять ?
-Jack- вне форума Ответить с цитированием
Старый 18.11.2016, 22:50   #5
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

а есть разница штоле? ))
come-on вне форума Ответить с цитированием
Старый 18.11.2016, 23:40   #6
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,867
По умолчанию

Цитата:
Сообщение от -Jack- Посмотреть сообщение
Научишь, как дебагером библиотеки проверять ?
Указываешь в меню Run - Parameters - Host Application приложение, которое использует эту библиотеку. Ставишь брейкпойнт в интересующем тебя месте её кода и запускаешь то приложение.
northener вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка: access violation at address 03d6d615 in module 'Matrix.dll' read of address 00000000 Oda. Общие вопросы Delphi 11 04.04.2016 17:40
Access violation at address XXXXXX in module 'YYYYYY'. Read of address ZZZZZZ' nik-kang Помощь студентам 0 18.06.2012 22:22
Access violation at address 004733C4 in module 'loginin.exe'. Read of address 00000048' pavellyba Общие вопросы Delphi 2 18.08.2011 10:32
Access violation at address 00447E73 in modul Project.exe. Read of address 00000057. ArtGrek Общие вопросы Delphi 40 12.03.2011 22:03
Access violation at address 00478D0E in module 'Project1.exe'. Write of address 00000000 fondreykus-1 Общие вопросы Delphi 5 27.01.2010 14:25