Как правильно использовать dll в фасм ?

Тема в разделе "WASM.BEGINNERS", создана пользователем 6aHguT, 7 авг 2006.

  1. 6aHguT

    6aHguT New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2005
    Сообщения:
    15
    Есть либа jcalg1 (думаю все знают зачем она) . Как правильно заставить работать её ?
    Делаю так.
    Впроге на С++ это пример выглядит так
    CODE
    JCALG1_GetInfo(&Jcalg1_Info);

    printf("\n Algorithm revision: %d.%d", Jcalg1_Info.majorVer, Jcalg1_Info.minorVer);

    где выше определено _JCALG1_Info Jcalg1_Info; а _JCALG1_Info это и есть нужная структура.
    Дизасмцо это так

    .text:004011A4 lea eax, [esp+438h+var_41C]
    .text:004011A8 push eax
    .text:004011A9 call sub_401B62 ;это нужная процедура (заполняет поля структуры)
    .text:004011AE mov ecx, [esp+438h+var_418]
    .text:004011B2 mov edx, [esp+438h+var_41C]
    .tex

    В сорце сама процедура выглядит так
    JCALG1_GetInfo PROC stdcall pInfoStruct:lol: WORD
    mov eax,pInfoStruct
    mov [eax+_JCALG1_Info.MajorRevision],MAJOR_REV
    mov [eax+_JCALG1_Info.MinorRevision],MINOR_REV
    mov [eax+_JCALG1_Info.SmallDecompressorSize],(offset JCALG1_Decompress_Small_ends-offset JCALG1_Decompress_Small)
    mov [eax+_JCALG1_Info.FastDecompressorSize],(offset JCALG1_Decompress_Fast_ends-offset JCALG1_Decompress_Fast)
    ret
    JCALG1_GetInfo ENDP

    У себя в проге обьявил структуру
    struc _JCALG1_Info
    {
    .MajorRevision dd ?
    .MinorRevision dd ?
    .FastDecompressorSize dd ?
    .SmallDecompressorSize dd ?
    }

    но с ней ваще некомпилица
    делаю тогда так. (как посоветовали)
    _JCALG1_Info:
    _JCALG1_Info.MajorRevision dd ?
    _JCALG1_Info.MinorRevision dd ?
    _JCALG1_Info.FastDecompressorSize dd ?
    _JCALG1_Info.SmallDecompressorSize dd ?
    Пытаюсь делать так
    CODE
    lea eax, [_JCALG1_Info]
    push eax
    call JCALG1_GetInfo
    invoke SetDlgItemText,[hWnd],2002,_JCALG1_Info.MajorRevision

    Пачиму это неработает ??? Где я неправ ?
    Прилогаю на фасме то чё неработает.
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Структуру ты только объявил, но для неё надо ещё место выделить:
    Код (Text):
    1. struc _JCALG1_Info
    2. {
    3.   .MajorRevision dd ?
    4.   .MinorRevision dd ?
    5.   .FastDecompressorSize dd ?
    6.   .SmallDecompressorSize dd ?
    7. }
    8.  
    9. _J_Info     _JCALG1_Info
    Ещё call JCALG1_GetInfo надо заменить на call [JCALG1_GetInfo], она же в импорте, короче читай хелп по фасму
     
  3. 6aHguT

    6aHguT New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2005
    Сообщения:
    15
    Сделал так
    Код (Text):
    1. lea eax, [J_Info]  
    2. push eax
    3. call [JCALG1_GetInfo]
    4. invoke SetDlgItemText,[hWnd],2002,J_Info.MinorRevision
    Всё компилаца, но поцему в EDIT (2002) ничё не выводиться ? Ттам же должна вывестись версия. Где я неправ ?
     
  4. nobodyzzz

    nobodyzzz New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2005
    Сообщения:
    475
    Хм, наверное, надо SetDlgItemInt, а не SetDlgItemText MinorRevision дворд а не строка