OVH Cloud OVH Cloud

Intégrer une lib dans C++ Builder

8 réponses
Avatar
lgjean près de Vannes
Bonjour


Je débute sous C++ Builder 6. Je souhaite intégrer une librairie composée
d'une .dll et d'un .lib.
Pour tout dire c'est inpout.dll qui permet d'accéder directement au port
parallèle.

Sous Visual Studio Express 2005 ça marche sans problème, mais pas avec le
soft de Borland :-(

Comment procéder ?


Merci !


Jean

8 réponses

Avatar
johann.d
"lgjean près de Vannes" a écrit dans le
message de news:452b1cdd$0$5091$
Bonjour


Je débute sous C++ Builder 6. Je souhaite intégrer une librairie composée
d'une .dll et d'un .lib.
Pour tout dire c'est inpout.dll qui permet d'accéder directement au port
parallèle.

Sous Visual Studio Express 2005 ça marche sans problème, mais pas avec le
soft de Borland :-(



Le format des .lib n'est pas le même entre C++ Builder et Visual C++.
Les 2 outils impdef.exe et implib.exe fournis avec C++ Builder assurent
l'importation :

set PATH=C:Program FilesBorlandCBuilder6Bin;%PATH%

impdef.exe -a library_bcc.def library.dll
implib.exe -a library_bcc.lib library_bcc.def

Ensuite tu n'as plus qu'à ajouter library_bcc.lib dans les entrées du linker
Borland.

--
Johann.D
Avatar
lgjean près de Vannes
> impdef.exe -a library_bcc.def library.dll
implib.exe -a library_bcc.lib library_bcc.def



Ok ça c'est fait


Ensuite tu n'as plus qu'à ajouter library_bcc.lib dans les entrées du
linker



Là je sèche, j'ai fait "project -> add to project -> inpout32_bcc.lib"
et j'ai le msg d'erreur :

[Linker Error] Unresolved external '__stdcall Out32(short, short)'
referenced from C:PROGRAM FILESBORLANDCBUILDER6PROJECTSUNIT1.OBJ

Pourtant j'ai déclaré dans le source :

short _stdcall Inp32(short PortAddress);
void _stdcall Out32(short PortAddress, short data);

Ensuite dans la fonction du bouton :

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Out32(0x378, 0xAA);
}

Merci du coup de main !


Jean
Avatar
Dominique Vaufreydaz
Bonjoru,

Pourtant j'ai déclaré dans le source :



Y'aurais pas plutot un #include a faire ?

short _stdcall Inp32(short PortAddress);
void _stdcall Out32(short PortAddress, short data);



J'aurais ecrit extern short _stdcall Inp32(short PortAddress);

Doms.
Avatar
lgjean près de Vannes
> Y'aurais pas plutot un #include a faire ?



Il n'y a pas d'include de fournit, j'ai essayé de mettre les déclaration
dans l'include créé par builder mais ça marche pas.


J'aurais ecrit extern short _stdcall Inp32(short PortAddress);



J'ai essayé mais toujours sans succès.


Jean
Avatar
Michel Leunen
lgjean près de Vannes wrote:

J'aurais ecrit extern short _stdcall Inp32(short PortAddress);



J'ai essayé mais toujours sans succès.



Ceci est plus exact:

extern "C"
{
short __stdcall Inp32(short PortAddress);
void __stdcall Out32(short PortAddress, short data);
}

Michel
--
----------------------------------------
Michel Leunen
mailto: see my homepage.
C++Builder, BCC5.5.1 Web site:
http://www.leunen.com/
----------------------------------------
Avatar
lgjean près de Vannes
Problème résolu avec :

extern "C" __declspec(dllexport) short _stdcall Inp32(short PortAddress);
extern "C" __declspec(dllexport) void _stdcall Out32(short PortAddress,
short data);

Trouvé ici :
http://www.allprog.com/CBuilder/DLL.htm

En tout cas merci pour votre aide !


Jean
Avatar
johann.d
"lgjean près de Vannes" a écrit dans le
message de news:452ca0d0$0$5110$
Problème résolu avec :

extern "C" __declspec(dllexport) short _stdcall Inp32(short PortAddress);
extern "C" __declspec(dllexport) void _stdcall Out32(short PortAddress,
short data);




C'est plutôt un dllimport dans ton cas, non ?
Avatar
lgjean près de Vannes
> C'est plutôt un dllimport dans ton cas, non ?



MDR j'ai même pas percuté !
Et pourtant ça marche très bien comme-ça...


Jean