Не могу выполнить функцию из DLL

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Не могу выполнить функцию из DLL

Сообщение t-ea » 23.04.2016 14:03:48

Попытался «упростить» библиотеку для работы с TWAIN только для FPC, то есть без привязки к VCL Lazarus.
Но на первом же вызове функция из DLL сообщает об ошибочном результате.
Пример который пытался «упростить» в Lazarus работает.
Что и где пропущено при переносе?

Собственно программа с ошибкой:
Код: Выделить всё
Uses Windows;

Const
TWLG_USERLOCALE = -1;  TWRC_SUCCESS    = 0;
DG_CONTROL      = $0001; DAT_IDENTITY    = $0003; MSG_GETFIRST    = $0004;

Type
TW_UINT16 = word; TW_UINT32 = cardinal;
TW_STR32 = array[0..33] of AnsiChar;
TW_MEMREF = pointer;

TW_VERSION = packed record
    MajorNum: TW_UINT16;
    MinorNum: TW_UINT16;
    Language: TW_UINT16;
    Country: TW_UINT16;
    Info: TW_STR32;
  end;

pTW_IDENTITY = ^TW_IDENTITY;
TW_IDENTITY = packed record
    Id: TW_UINT32;
    Version: TW_VERSION;
    ProtocolMajor: TW_UINT16;
    ProtocolMinor: TW_UINT16;
    SupportedGroups: TW_UINT32;
    Manufacturer: TW_STR32;
    ProductFamily: TW_STR32;
    ProductName: TW_STR32;
   end;

DSMENTRYPROC = function(pOrigin: pTW_IDENTITY; pDest: pTW_IDENTITY;
    DG: TW_UINT32; DAT: TW_UINT16; MSG: TW_UINT16;
    pData: TW_MEMREF): TW_UINT16; stdcall;
TDSMEntryProc = DSMENTRYPROC;

Var
fHandle : tHandle;
TWAINProc : tDSMEntryProc;
AppInfo : tw_IDENTITY;
NewSource: tw_IDENTITY;
CallRes: tw_UINT16;

Begin
WriteLn('+++');
fHandle:=LoadLibrary('C:\Windows\TWAIN_32.DLL');
if fHandle = INVALID_HANDLE_VALUE then begin
    WriteLn('TWAIN_32.DLL не загружена');
    Halt;
   end
  else WriteLn('Адрес TWAIN_32.DLL = ', longint(fHandle));
TWAINProc:=tDSMEntryProc(GetProcAddress(fHandle, 'DSM_Entry'));
WriteLn('Адрес DSM_Entry    = ', longint(TWAINProc));
with AppInfo do begin
    Id:=0;
    with Version do begin
      MajorNum:=1;
      MinorNum:=0;
      Language:=TWLG_UserLocale;
      Country:=1;
      Info:='Application name';
     end;
    ProtocolMajor:=1;
    ProtocolMinor:=9;
    SupportedGroups:=3;
    Manufacturer:='';
    ProductFamily:='';
    ProductName:='';
  end;
NewSource:=AppInfo;
CallRes:=TWAINProc(@AppInfo, nil, DG_CONTROL, DAT_IDENTITY, MSG_GETFIRST, @NewSource);
WriteLn('CallRes = TWRC_Success? - ', CallRes = TWRC_Success);
End.


Библиотека (delphitwain-kluug-1-5--2014-06-25.zip), которая упрощалась, во вложении.
Из неё удалены все файлы не касающиеся нужного мне кода: информация о лицензии, версия, справка и т.д., так как размер оригинального файла превышал ограничения на размер вложения.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
t-ea
новенький
 
Сообщения: 98
Зарегистрирован: 22.09.2006 00:22:34

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24

Рейтинг@Mail.ru