[C++/BC4] DLL probleem

Pagina: 1
Acties:

  • ADJVooDoo
  • Registratie: Januari 2001
  • Laatst online: 27-06 13:20
Ik heb een DLL waar verder helemaal geen beschrijving of iets anders bij is. Nu wil ik methoden die in deze DLL staan, gebruiken in mijn Borland C++ Builder 4 programma.
Hoe moet dat?
Normaal gesproken voeg je een LIB bestand toe aan het project en include je de header file die bij de DLL hoort.
De header en lib bestand heb ik niet.

Kunnen deze gegenereerd worden?

Alvast bedankt.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nee

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • ADJVooDoo
  • Registratie: Januari 2001
  • Laatst online: 27-06 13:20
Kan iemand mij dan vertellen hoe ik de functies in die DLL wel kan gebruiken?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je kunt een DLL openen in een programmaatje wat de functies in de dll kan tonen, zoals de dependency walker. Dan kun je de dll laden met LoadLibrary () en het adres opvragen met GetProcAddress ()

maar daar schiet je nog niets mee op, aangezien je niet weet welke parameters de functie verwacht

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Dependency walker geeft complete sigs van de functies hoor.

Professionele website nodig?


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Oh, da's nieuw voor me

Maar hoe wil ie dat doen met C-style unmangled functienamen? Daar kan ie moeilijk een signature van geven. En al weet je de signature, dan nog weet je niet wat de parameters voorstellen. Ik bedoel, leuk hoor, dat je weet dat het een (int, int, long, void *) moet zijn, maar wat stellen ze voor? :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Bigs
  • Registratie: Mei 2000
  • Niet online
Met GetProcAddress kun je de functie opzoeken, maar dan moet je wel het prototype van de functie weten. Je zult dus toch een headerfile moeten hebben.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

.oisyn schreef op 25 februari 2003 @ 11:25:
Oh, da's nieuw voor me

Maar hoe wil ie dat doen met C-style unmangled functienamen? Daar kan ie moeilijk een signature van geven. En al weet je de signature, dan nog weet je niet wat de parameters voorstellen. Ik bedoel, leuk hoor, dat je weet dat het een (int, int, long, void *) moet zijn, maar wat stellen ze voor? :)
Sja het moet wel spannend blijven he ;)

Professionele website nodig?


  • ADJVooDoo
  • Registratie: Januari 2001
  • Laatst online: 27-06 13:20
Bestaat er echt geen programmaatje die een header file genereerd? Het is toch wel mogelijk zo iets te maken, ik bedoel, alle informatie die er voor nodig is staat wel in de DLL.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

ADJVooDoo schreef op 25 February 2003 @ 11:56:
alle informatie die er voor nodig is staat wel in de DLL.


Dat staat het dus niet. Het enige wat je eruit kunt halen is de functienaam. Met een disassembler kun je evt. ook nog achter het aantal parameters komen, maar dan houdt het wel op. Als het een C++ functie betreft kun je wel de signature eruit halen, maar die worden over het algemeen vrij weinig gebruikt.

Verder heb je echt _geen_ informatie

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Welke DLL gaat het om?

Professionele website nodig?


Verwijderd

Ja, dit bestaat wel. Borland C++ 5 wordt geleverd met een tooltje genaamd implib, deze tool genereert een import library van een DLL. Ik ga er van uit dat een dergelijke tool ook bij de C++ builders geleverd wordt. De prototypes van de functies blijven hiermee echter onbekend.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 25 februari 2003 @ 14:18:
Borland C++ 5 wordt geleverd met een tooltje genaamd implib


cool, leveren ze heel BC++5 bij een tooltje? Dan willen ze er zeker vanaf :P
deze tool genereert een import library van een DLL. Ik ga er van uit dat een dergelijke tool ook bij de C++ builders geleverd wordt. De prototypes van de functies blijven hiermee echter onbekend.
duh, daar ging het nou juist om. Dat een lib te maken is weet ik ook wel, maar daar heb je dus geen fuck aan als je de function signatures niet weet. De topicstarter wil een DLL gebruiken die hij verder niet kent en waar ook geen documentatie bij is. Kan ie zonder info de headers genereren? Nee. Is het dus bruikbaar? Niet echt

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • unclero
  • Registratie: Juni 2001
  • Laatst online: 23-08 21:00

unclero

MB EQA ftw \o/

Tja..

maak een dezedll.h aan en dan:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/* de dll.. */
HMODULE hDezeDLL;

/* declaraties.. */
void (*BlaSub)(HWND hWnd, int iTotal);
BOOL (*BlaFunc)(HANDLE hFile, DWORD dwMode);

BOOL LoadDezeDLL(BOOL) {
        /* laad dll */
        hDezeDLL = LoadLibrary("deze.dll");
        if(hDezeDLL == NULL) {
                MessageBox(NULL,"Couldnt load deze.dll!","Error!",MB_ICONERROR);
                return FALSE;
        }
        /* laad de functies.. */
        (FARPROC &)BlaSub = ::GetProcAddress(hDezeDLL,"BlaSub");
        (FARPROC &)BlaFunc = ::GetProcAddress(hDezeDLL,"BlaFunc");
        return TRUE;
}

/* voor de netheid.. */
void UnLoadDezeDLL(void) {
        FreeLibrary(hDezeDLL);
}


succes :)

of je gebruikt natuurlijk implib om .lib's te bouwen :)

Edit:
Oeps.. even niet alle posts gelezen :P
Nou, lijkt mij een kwestie van zoeken naar documentatie over de DLL.. Met Windows QuickView kun je veel eruit halen, maar geen parameters ofzo..

[ Voor 16% gewijzigd door unclero op 25-02-2003 20:03 . Reden: oepsie ]

Quelle chimère est-ce donc que l'homme? Quelle nouveauté, quel monstre, quel chaos, quel sujet de contradiction, quel prodige!

Pagina: 1