Toon posts:

[C++] gebruik van dll's

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik weet niet zeker of mn topic title goed is, maar ik heb een probleem wat voornamelijk te maken heeft met mijn gebrek aan c++ kennis. Ik programmeer normaal in JAVA of C#.

het probleem: ik moet een apparaatje, aangesloten op de seriele port(COM1), aansturen. De fabrikant heeft 2 .lib bestanden, 2 .dll en 1 .h bestand bijgeleverd. De dll bestanden heb ik gekopieert naar /Windows/system32 en de lib en h bestanden staan in de project dir.
Ik gebruik Visual C++ 6.0. Heb een nieuw console project gestart. Als eerste importeer ik het .h bestand. Maar nu wil ik functies gebruiken die hierin gedefinieerd zijn, en dit lukt niet. ik weet niet hoe. De functie definities zien er zo uit:

code:
1
EXPORTS WORD  CALLBACK Open_Com(char cPort, DWORD dwBaudRate, char cData, char cParity, char cStop);


Helaas zijn er niet echt uitgebreidde help files bijgeleverd, dus ik hoop dat iemand mij hier in 1 oogopslag kan zeggen wat ik moet doen. Wat ik ook vreemd vindt is dat de header file in kwestie als eerste geinclude moet worden want anders krijg ik syntax errors...of is dit normaal???

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

en dit lukt niet
Wat lukt er niet? Wat gaat er fout? Wat zijn de foutmeldingen? Wat heb je al geprobeerd?
De mensen op GoT weten misschien wel veel, maar ze zijn zeker niet alwetend ;). Als je je auto naar de garage brengt zeg je ook niet tegen de monteur dat het niet lukt om ermee naar je werk te rijden :P

Wild guess: link je wel met de libraries?

[ Voor 32% gewijzigd door .oisyn op 19-06-2006 18:23 ]

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.


  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

met VC++6, gebruik in jouw sourcefile
C++:
1
2
3
4
5
#pragma comment(lib,"libbestand1")
#pragma comment(lib,"libbestand2")
#include "headerbestand"

//jouw code

-niks-


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 10-12-2025
En gebruik een moderne compiler; VC6 is antiek.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Verwijderd

Topicstarter
dat VC6 antiek is maakt niet zoveel uit. De meegeleverde bestanden zijn dit ook. Er is niet echt een fout. Ik weet gewoon niet hoe ik die functies moet gebruiken. Er zit een hele beknopte handleiding bij:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 Using Visual C++ DLL:

    step 1:  Copy EX9000.DLL and EXCOM.DLL into

        C:\WINDOWS\SYSTEM  (for WINDOWS 95/98/ME)
                C:\WINNT\SYSTEM32  (for WINDOWS NT/2000).
            
    step 2:  The source program must include "EX9000.H"

    step 3:  Make sure that EX9000.H,EX9000.LIB & EXCOM.LIB in the same directory with source program

    step 4:  Edit the source program

    step 5:  Execute compile & link process with EX9000.LIB & EXCOM.LIB

Dan zit er nog een soort API bij waar gewoon per functie staat beschreven welke parameters je mee moet geven. Maar ik zie in t header bestand geen constructor ofzo, dus het is niet een kwestie van een object creeeren en de functies toepassen. De syntax is mij ook onbekend. Het linken gaat volgens mij goed, het includen van het header bestand gaat goed, maar hoe gebruik ik t???

stukje van t header bestand nogmaals:
code:
1
2
3
4
5
6
7
8
EXPORTS WORD  CALLBACK Open_Com(char cPort, DWORD dwBaudRate, char cData, char cParity, char cStop);
EXPORTS BOOL  CALLBACK Close_Com(char cPort);

EXPORTS WORD  CALLBACK ComPortStatus(char port);
//  1: this port is used now
//  0: this port isn't used now

EXPORTS WORD  CALLBACK Send_Receive_Cmd(char cPort, char szCmd[], char szResult[], WORD wTimeOut, WORD wChksum, WORD *wT);

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik neem aan dat je wel weet wat je uiteindelijke doel is? Verder weten wij natuurlijk niet meer dan jij. En je snapt toch wel dat een functie niet per se aan een object gekoppeld hoeft te zijn? Die EXPORTS en CALLBACK kun je wegdenken, die geven alleen de calling convention aan en waar ze vandaan komen. Je doet in je code gewoon een Open_Com en daarna een Send_Receive_Cmd met de juiste parameters.

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.


Verwijderd

Topicstarter
ja, dat dacht ik ook. Maar helaas...
code:
1
error C2065: 'Open_Com' : undeclared identifier

ik kan m dus blijkbaar niet static aanroepen...

  • TweakPino
  • Registratie: September 2005
  • Laatst online: 19-02 07:50
Moet je ook niet EX9000.LIB en EXCOM.LIB toevoegen aan je project
via project-->add to project-->files... ?

  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 14-02 22:37
Heb je de oplossing van MLM al geprobeerd? En anders zou ik de .lib en .h bestanden toevoegen aan je project settings. Ik weet niet meer precies waar, maar in Visual Studio kon je ergens het pad opgeven van je .lib en .h files. Misschien ff google op configuring libraries VC6 ofzo.

Dit dus.

Let wel dat je dan nog steeds je .h file moet includen. Aan je foutmelding te zien heb je die nog niet geinclude omdat ie hem niet kan vinden?

[ Voor 29% gewijzigd door The Fox NL op 20-06-2006 10:33 ]


Verwijderd

Topicstarter
TweakPino schreef op dinsdag 20 juni 2006 @ 10:25:
Moet je ook niet EX9000.LIB en EXCOM.LIB toevoegen aan je project
via project-->add to project-->files... ?
Dit geldt niet voor de .lib bestanden. Het header bestand heb ik wel toegevoegd op deze manier.
The Fox NL schreef op dinsdag 20 juni 2006 @ 10:29:
Heb je de oplossing van MLM al geprobeerd? En anders zou ik de .lib en .h bestanden toevoegen aan je project settings. Ik weet niet meer precies waar, maar in Visual Studio kon je ergens het pad opgeven van je .lib en .h files. Misschien ff google op configuring libraries VC6 ofzo.

Dit dus.

Let wel dat je dan nog steeds je .h file moet includen. Aan je foutmelding te zien heb je die nog niet geinclude omdat ie hem niet kan vinden?
Wat MLM zegt heb ik ook geprobeerd. Maar zonder succes. Wat er op de link staat uitgelegd heb ik ook nog even extra gedaan en via project>settings>link heb ik ook de beide libs toegevoegd onder libraries.

Ook include ik in de source het ex9000.h bestand. Als ik dit niet doe geeft ie wel exact dezelfde foutmelding overigens. Dus het lijkt wel of die include niet goed lukt. Maar wat anders kan ik doen dan #include "ex9000.h"???

  • .oisyn
  • Registratie: September 2000
  • Nu online

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op dinsdag 20 juni 2006 @ 10:11:
ja, dat dacht ik ook. Maar helaas...
code:
1
error C2065: 'Open_Com' : undeclared identifier

ik kan m dus blijkbaar niet static aanroepen...
Zeg dat dan meteen, ik vroeg nog wat de foutmeldingen waren 8)7. Zo gaat de topic wel erg moeizaam.

Anyway, controleer of er in die header wat #ifndef of #ifdef directives staan. Er staat natuurlijk een header guard in (in de trant van #ifndef EX9000_H, #define EX9000_H, #endif), maar wellicht vereist ie dat iets anders ook gedefinieerd moet zijn voordat je die functies kunt gebruiken.

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.


  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 14-02 22:37
Verwijderd schreef op dinsdag 20 juni 2006 @ 11:14:
[...]


Dit geldt niet voor de .lib bestanden. Het header bestand heb ik wel toegevoegd op deze manier.


[...]


Wat MLM zegt heb ik ook geprobeerd. Maar zonder succes. Wat er op de link staat uitgelegd heb ik ook nog even extra gedaan en via project>settings>link heb ik ook de beide libs toegevoegd onder libraries.

Ook include ik in de source het ex9000.h bestand. Als ik dit niet doe geeft ie wel exact dezelfde foutmelding overigens. Dus het lijkt wel of die include niet goed lukt. Maar wat anders kan ik doen dan #include "ex9000.h"???
Je moet niet alleen de libs toevoegen. Ook het .h bestand moet je toevoegen. De lib onder Library files, de .h onder include files.

Verwijderd

Topicstarter
.oisyn schreef op dinsdag 20 juni 2006 @ 11:56:
[...]


Zeg dat dan meteen, ik vroeg nog wat de foutmeldingen waren 8)7. Zo gaat de topic wel erg moeizaam.

Anyway, controleer of er in die header wat #ifndef of #ifdef directives staan. Er staat natuurlijk een header guard in (in de trant van #ifndef EX9000_H, #define EX9000_H, #endif), maar wellicht vereist ie dat iets anders ook gedefinieerd moet zijn voordat je die functies kunt gebruiken.
Dit staat bovenaan:
code:
1
2
3
4
5
#ifdef __cplusplus
#define EXPORTS extern "C" __declspec (dllimport)
#else
#define EXPORTS
#endif


niet die standaard header guard die jij beschrijft dus. Maar ik ga dr vanuit dat het wel allemaal goed geschreven is....het is tenslotte meegeleverd door de fabrikant...

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 11:54
Misschien moet je de basis van het build proces nog ff doornemen.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
Waarschijnlijk heel stom maar hopelijk te vergeven voor een JAVA programmeur: Ik was gewoon een WIN32 console applicatie begonnen in VC6. Maar na wat proberen bleek het met een WIN32 MFC concole applicatie wel te werken allemaal.

Had ik dit nou ergens aan kunnen zien, of is dit gewoon logisch???

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 11:54
Nee niet echt volgens mij. Heb een aantal plain dll's gemaakt die ook niet werkten met dllexport. Pas nadat ik een export file had gemaakt werden de functies daadwerkelijk geexporteerd.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1