Конференция "WinAPI" » Проблемы с импортом функции с FoxPro
 
  • dimonf (24.04.11 13:17) [0]
    Господа есть функция на Фохпро:
    FUNCTION decrs
    LPARAMETERS stroka
    PRIVATE ALL
    stro = stroka
    IF fastdecryptmemory(@stro, @stro, LEN(stro))<>0
       RETURN ""
    ENDIF
    RETURN stro
    ENDFUNC

    которая импортируется из dll.
    Задача переписать ее на delphi, подскажите как?
    У меня получилось пока:
    function FastDecryptMemory(Value: PAnsiChar; var Key: PAnsiChar; Size: Integer): integer; stdcall; external 'c:\project\neoglite.dll';

    function MyFastDecryptMemory(Value, Key: PAnsiChar; Size: Integer): integer;  stdcall;
    var
     FFile: TStringList;
     FValue, FKey: string;
     FInt: integer;
    begin
     FFile := TStringList.Create;
     try
       FFile.LoadFromFile(GetCurrentDir + '\info.log');
       FFile.Add(FormatDateTime('dd:mm:yyyy mm:ss ', now()) + ' Вызов функции: FastDecryptMemory');
       try
         FKey := Value^;
         FValue := 'test';
         FFile.Add(FormatDateTime('dd:mm:yyyy mm:ss ', now()) + ' FastDecryptMemory до: Value: ' + FValue);

         if Length(FValue) > 0 then
         begin
           FInt :=  FastDecryptMemory(@FValue, @FKey, Length(FValue));

           FFile.Add(FormatDateTime('dd:mm:yyyy mm:ss ', now()) + ' FastDecryptMemory после: Value: ' + string(FValue));
           FFile.Add(FormatDateTime('dd:mm:yyyy mm:ss ', now()) + ' FastDecryptMemory после: result=' + string(FInt));
         end;

       except
         on e: exception do FFile.Add(FormatDateTime('dd:mm:yyyy mm:ss ', now()) + ' ' + e.message);
       end;

     finally
       FFile.SaveToFile(GetCurrentDir + '\info.log');
       FFile.Free;
       result := 0;
     end;
    end;

    но при вызове функции FInt :=  FastDecryptMemory(@FValue, @FKey, Length(FValue));
    выскакивает ошибка 24:04:2011 04:16  Access violation at address 10041CD7 in module 'neoglite.dll'. Read of address 00000000

    Подскажите что не так? :(
  • dimonf (24.04.11 13:18) [1]
    Код эксперементальный, конечно же писал: FInt :=  FastDecryptMemory(@FValue, @FValue, Length(FValue));
  • dimonf (25.04.11 07:38) [2]
    господа, неужели нет мыслей? :(
  • Slym © (25.04.11 08:49) [3]
    function FastDecryptMemory(Value: PAnsiChar; var Key: PAnsiChar; Size: Integer): integer; stdcall; external 'c:\project\neoglite.dll';
    зочем ссылку по ссылке отправил?
    function FastDecryptMemory(Value,Key: : PAnsiChar;Size: Integer): integer; stdcall; external 'c:\project\neoglite.dll';

  • Сергей М. © (25.04.11 09:29) [4]

    > Value,Key: : PAnsiChar


    > FValue, FKey: string;
    > ...
    >     FKey := Value^; // ????
    >     FValue := 'test'; // константа !!!!!!
    > ...
    >  FInt :=  FastDecryptMemory(@FValue, @FKey, Length(FValue));
 
Конференция "WinAPI" » Проблемы с импортом функции с FoxPro
Есть новые Нет новых   [134431   +12][b:0][p:0.001]