[ASM]problem z Externami

0

Nie ważne gdzie wrzucę moje externy z aplikacji WinApi, zawsze linker wyrzuca następujący błąd:

Error: Unresolved external 'GetModule' referenced from module program.asm
Error: Unresolved external 'LoadIcon' referenced from module program.asm
Error: Unresolved external 'LoadCursor' referenced from module program.asm
Error: Unresolved external 'RegisterClass' referenced from module program.asm
Error: Unresolved external 'CreateWindow' referenced from module program.asm
Error: Unresolved external 'GetMessage' referenced from module program.asm
Error: Unresolved external 'DispatchMessage' referenced from module program.asm
Error: Unresolved external 'DefWindowProc' referenced from module program.asm

Do kompilacji używam następującego batcha:

@echo off
Tasm32 /ml /m3 /z /t program.asm
Tlink32 -Tpe -aa program,,,import32.lib
@del program.map
@del program.obj

Natomiast Deklaracja wygląda tak:

    extrn     GetModule              : proc
    extrn     LoadIcon                : proc
    extrn     LoadCursor             : proc
    extrn     RegisterClass          : proc
    extrn     CreateWindow        : proc
    extrn     ShowWindow          : proc
    extrn     GetMessage            : proc
    extrn     TranslateMessage    : proc
    extrn     DispatchMessage     : proc
    extrn     ExitProcess              : proc
    extrn     DefWindowProc        : proc
0

hmm nie wiem czy sie to przyda ale niektore kompilatory zaczynaja nazwy funkcji od znaku _ np: funkcja doopa to w kodzie: _doopa

0

ja nie mówie o jakichś kompilatorach, tylko TASMie :)

0

heh ale skoro externy i winapi to to byla tylko propozycja

0

Zapomniałeś o 'A' lub 'W' na końcu nazwy funkcji - np.: 'MessageBoxA'.
'A' oznacza kodowanie textu jako ansi, 'W' zaś jako widechar. Kompilatory języków wysokiego poziomu mają zdeklarowany automatycznie układ znaków, więc nie trzeba dodawać 'A' lub 'W'. Pod asmem trzeba dokładnie sprecyzować o jaką funkcję chodzi.
Powinno zadziałać.

0

po fakcie :P dawno przerzuciłem się na FASMa :) a w ogóle w TASMie podobno te procki mają inną nazwę..

0

W FASM takze trzeba rozrozniach Ansi i Wide, ale jezeli uzywasz dostarczonych z FASM includow, to decyzja czy uzyjesz Ansi czy Wide jest tylko na etapie includowania: apia czy apiw, dalej mozesz uzywac juz wesji bez A i W.

1 użytkowników online, w tym zalogowanych: 0, gości: 1