[BCB + Asm] extern - było już i nie działa

0

Zacznę od kodu, a potem wyjaśnię:

unit1.cpp

#include <vcl.h>
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

#pragma argsused
#pragma hdrstop

extern "C" __declspec(dllexport) void __stdcall szukaj();
extern "C" int szukajtekstu(LPVOID adres, char *tekst,DWORD rozmiar);

int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
        return 1;
}

void __stdcall szukaj()
{
       int k;
       char sPlik[20];
       char sTekst[256];
       HANDLE uchwyt;
       HANDLE plik;
       LPVOID wojd;
       DWORD rozmiar;
       ... // wykorzystuje mapowanie pliku: otrzymuje adres wojd i rozmiar pliku
       k=0;
       k=szukajtekstu(wojd,sTekst,rozmiar); // wywolanie funkcji z asm
       ...
}

=======================================

unit1.h

       typedef void __stdcall (*PROCszukaj)();
       extern "C" void __stdcall szukaj();

=======================================

plik.asm

.386 
PUBLIC _szukajtekstu 

_TEXT SEGMENT para public 'CODE' use32
ASSUME cs:_TEXT 
_szukajtekstu PROC 
       ...
_szukajtekstu ENDP
_TEXT ENDS
END

=======================================

Jest to kod biblioteki DLL korzystającej z kodu napisanego w assemblerze. Jednak nie potrafię go dołączyć, a raczej zrozumieć się z kompilatorem nie mogę :/
No i przy kompilacji dostaję:
[Linker Error] Unresolved external '_szukajtekstu' referenced from I:\BORLAND\CBUILDER5\WORK\OS2A\UNIT1.OBJ

Biblioteka kompiluje się bezbłędnie i tak samo działa, gdy wyrzucę z kodu odwołania do szukajtekst(...)
Plik asm jest poprawnie dołączony do projektu i kompiluje się.
Znalazłem gdzieś na forum informację, że to brak "C" po extern odpowiada za tego typu problemy, ale jednak nie działa :(
HELP [!!!]

0

Jeszcze sugerując się informacjami na temat błędu, dodałem plik OBJ do projektu (nie mam pojęcia, jaki to ma sens :/) i otrzymuję nowy error:
[Linker Fatal Error] Fatal: Unsupported 16-bit segment(s) in module szukaj_a.asm
Enybady? :(

0
  1. poradziłem sobie
  2. kod bez zmian, usunąłem asm i obj z projektu i dodałem na nowo
  3. nie wiem, czemu teraz działa
  4. proszę o usunięcie tematu ;)

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