[ Príspevkov: 6 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 01.07.08
Prihlásený: 02.10.09
Príspevky: 80
Témy: 26 | 26
NapísalOffline : 03.07.2009 12:40 | Debugovanie DLLiek...

Mám vlastnú runtime knižnicu v ktorej sú veľmi často používané funkcie. A rozhodol som sa vytvoriť Konzolu,ktorá natiahne funkcie a overí či fungujú, no nastal problém, asi chvíľu po otvorení konzoly mi výjde hláška že sa "Vyskytol problém" a že je nutné ukončiť aplikáciu. Niekde na cudzom fóre som čítal,že to spôsobuje predávanie hodnôt DLLky alebo návratová hodnota DLLky neviete ako ošetriť toto správanie?...


Offline

Skúsený užívateľ
Skúsený užívateľ
Debugovanie DLLiek...

Registrovaný: 11.01.09
Prihlásený: 18.12.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 03.07.2009 13:01 | Debugovanie DLLiek...

Dôvodov môže byť niekoľko, ale najskôr ma napadá nekorektné obnovenie zásobníka, alebo nesprávna konvencia predávania parametrov (prvý prípad jedine žeby knižnica bola písana v ASM). V akom jazyku je písaná knižnica?
Btw ak máš skúsenosti s debuggovaním, použi napríklad free Olly Debugger, v ktorom si celý kód chybnej funkcie odkrokuješ.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 01.07.08
Prihlásený: 02.10.09
Príspevky: 80
Témy: 26 | 26
Napísal autor témyOffline : 03.07.2009 13:33 | Debugovanie DLLiek...

C++ (GNU GCC) pod Win32


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 01.07.08
Prihlásený: 02.10.09
Príspevky: 80
Témy: 26 | 26
Napísal autor témyOffline : 03.07.2009 13:44 | Debugovanie DLLiek...

Konzola.exe:
Kód:
   HINSTANCE runtime;
   runtime = LoadLibrary("Runtime.dll");
       if(runtime == NULL && messageAllowed == 0)
       {
         MessageBox(0, "Runtime.DLL sa nepodarilo nahrát.", "Error", MB_OK | MB_ICONINFORMATION);
         messageAllowed = 1;
       }
       else
       {
        RUNTIME SomeFunction = (RUNTIME)GetProcAddress(runtime,"SomeFunction");
        SomeFunction(0,"Natazena DLL","Message", MB_OK);
       }

   FreeLibrary(runtime);

Runtime.dll:
Kód:
void DLL_EXPORT SomeFunction(HWND hMessage,const LPCSTR sometext, const LPCSTR title,int Flags)
{
    MessageBoxA(hMessage, sometext, title,Flags);
}

a ukazatel RUNTIME definovaný ako:
Kód:
typedef void (WINAPI * RUNTIME)(HWND,LPCTSTR,LPCTSTR,int);


Offline

Užívateľ
Užívateľ
Debugovanie DLLiek...

Registrovaný: 19.09.06
Prihlásený: 19.11.24
Príspevky: 749
Témy: 31 | 31
Bydlisko: Ružomberok&...
NapísalOffline : 03.07.2009 14:35 | Debugovanie DLLiek...

Co si pametam z struktury dll, ked som to pisal v asm, tak jej vstupna funkcia musi vracat nenulovu hodntu, nebude to mat spolocne nieco s tym? Ale uz si nepametam ako sa prejavuje navratova hodnota nula. Vstupna funkcia reaguje na naloadovanie kniznice a jej odstranenie, a u teba ju nevidim, skus ju tam pridat.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 01.07.08
Prihlásený: 02.10.09
Príspevky: 80
Témy: 26 | 26
Napísal autor témyOffline : 03.07.2009 15:46 | Debugovanie DLLiek...

chyba sa našla...v hlavičkovom súbore DLLky som zabudol zmeniť definičný export DLLky


 [ Príspevkov: 6 ] 


Debugovanie DLLiek...




© 2005 - 2024 PCforum, edited by JanoF