logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Integracja funkcji assemblerowych z C++Builder i dostęp do zmiennych globalnych

gawron86 16 Sty 2006 20:34 909 3
REKLAMA
  • #1 2188285
    gawron86
    Poziom 2  
    Posty: 3
    Jak powinienem zdefiniować funkcje w module assemblerowym, żebym mógł je wywoływać z części kodu C++ w projekcie Buildera?
    Co mam zrobić, żeby zmienne globlane z C++ były widzialne w module assemblerowym?


    Używam TASM 4.1
    Z góry dziękuję za pomoc.
  • REKLAMA
  • #2 2188316
    Tommy82
    Poziom 41  
    Posty: 12139
    Pomógł: 455
    Ocena: 1072
    czy chodzi ci o cos takiego??

    TfrmMain::nazwa((na przyklad) short zmienna )
    {
    asm ....
    asm ....
    asm ....
    return 1 ;
    }
  • REKLAMA
  • #3 2193519
    gawron86
    Poziom 2  
    Posty: 3
    Nie, takie coś, to wstawki assemblerowe w kod.
    Ja chcę oddzielnie zasemblerować kod assemblera (otrzymam plik .obj) i dołączyć go do buildera (Add to project). Plik się dodaje, nie ma błędów, ale w builderze nie widać assemblerowych procedur.
  • #4 2201537
    gawron86
    Poziom 2  
    Posty: 3
    Doszedłem już do rozwiązania, jeśli kogoś interesuje to zagadnienie, to idzie to tak: (przykład trochę łopatologiczny)

    ;assemblerowy moduł:
    .586
    .model flat, stdcall

    .code
    public _A ;funkcja, którą wywołam spod Buildera
    extrn _k : WORD ; builderowa zmienna w której będę grzebał
    _A proc
    mov _k, 100
    ret
    _A endp
    end

    całość asembuję:
    tasm32 moduł_asm.asm /ml
    ml dla rozróżniania wielkich i małych liter (bo TASM tego domyślnie nie robi). Uzyskuję moduł .obj

    W builderze z menu Project->Add to project->moduł_asm.obj

    Do projektu buildera dodać deklarację funkcji zewnętrznej:
    extern "C" void A(); //nazwa funkcji bez podkreślenia

    i dalej można ją wywoływać jak zwykłą funkcję z c

    A(); //i tyle
REKLAMA