begin process at 2012 05 28 21:52:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Comment utiliser une DLL tiers ?


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Comment utiliser une DLL tiers ?

vendredi 11 avril 2003 à 21:35:51 | Comment utiliser une DLL tiers ?

StefB

Bonjour a tous,

QUESTIONS :
- Comment utiliser les classes, varaibles, constantes et fonctions dans une DLL sous VC++?
- Est-ce t'il existe un tutoriel simple et précis (je ne suis pas expert!!) qui puisse me guider?
- Est-ce que quelqu'un à un exemple de code simple qui montre comment faire?
- Je suis pret à prendre un tut en anglais (ma copine me le traduira si necessaire!)

En effet, je voudrais piloter un appareil. Je ne dispose que de la DLL, du .H mais pas d .LIB .
Cette DLL contient l'ensemble des classes, variables et fonctions qui sont necessaire au pilotage de cet appareil. Je ne dispose d'aucune doc autre que le header (et encore il est en japonnais!!)

Je sais que la question a très certainement été mainte fois aborté, mais je ne trouve pas de solution. On m'a bien filé les MSDNs en me disant que tout était dedans, mais ne parlant que très sommairement anglais, c'est une véritable galère pour trouver ce que je cherche.

Lors de mes recherches, chaque fois que l'on parle d'utiliser les fonctions d'une DLL, il faut disposer du Header, de la DLL et du .LIB (et c'est là que le bas blesse!!)

VieuxLion a écrit un article interessant sur les plugins, mais ce n'est pas ce que je cherche. (http://www.cppfrance.com/article.aspx?Val=1400).
Il y a aussi cette fameux post de Xs : CREER et UTILISER des DLLs (http://www.cppfrance.com/article.aspx?Val=871), mais là aussi la question reste en suspend quant à l'utilisation de DLLs externes.

PS : Pour des raisons de compatibilité, je dois utiliser Visual C++ 6.0.

STEF
samedi 12 avril 2003 à 15:18:11 | Re : Comment utiliser une DLL tiers ?

CoreBreaker

Les constantes n'existe pas dans les DLL.

Pour utilise des variables tu peux passer par des fonctions:
type getVar() et void setVar(type val)

tu peux aussi les exporter:
type __declspec(dllexport) var;

et pour l'importer:
type __declspec(dllimport) var;

pour les fonctions:
type __declspec(dllexport) f(type v);
type __declspec(dllimport) f(type v);

pour les classes:
__declspec(dllexport) class {...};
__declspec(dllimport) class {...};

Si tu n'a pas de .lib il faut utiliser l'API Windows:
pour importer une fonction c'est: GetProcAddress
mais il faut d'abord charget la DLL avec LoadLibrary

Sache que dans les DLL les variables sont partagé ainsi chaque instance qui importe la DLL rique de commetre des effets de bord.

Voici un bout de source que j'ai fait pour quelqu'un:
// k8d.cpp : Defines the entry point for the DLL application.
//

#include <stdio.h>
#include "stdafx.h"

static HINSTANCE ghInstance;
static bool gbLibraryLoaded= false;

int (*LitIOdata)(int i);
int (*LitIO)(int i);

/*RADIX CONVERSION FUNCTIONS*/
void (*DecToBin)(int DecNumber, char *Bin);
int (*BintoDec)(char *BinNumber);
void (*DecToHex)(int DecNumber, char *Hex);
int (*HexToDec)(char *HexNumber);

/*IO CONFIGURATION PROCEDURES*/
void (*ConfigAllIOasInput)(void);
void (*ConfigAllIOasOutput)(void);
void (*ConfigIOchipAsInput)(int Chip_no);
void (*ConfigIOchipAsOutput)(int Chip_no);
void (*ConfigIOchannelAsInput)(int Channel_no);
void (*ConfigIOchannelAsOutput)(int Channel_no);

/*UPDATE IOdata & IO ARRAY PROCEDURES*/
void (*UpdateIOdataArray)(int Chip_no, int Data);
void (*ClearIOdataArray)(int Chip_no);
void (*SetIOdataArray)(int Chip_no);
void (*SetIOchArray)(int Channel_no);
void (*ClearIOchArray)(int Channel_no);

/*OUTPUT PROCEDURES*/
void (*IOoutput)(int Chip_no, int Data);
void (*UpdateAllIO)(void);
void (*ClearAllIO)(void);
void (*SetAllIO)(void);
void (*UpdateIOchip)(int Chip_no);
void (*ClearIOchip)(int Chip_no);
void (*SetIOchip)(int Chip_no);
void (*SetIOchannel)(int Channel_no);
void (*ClearIOchannel)(int Channel_no);

/*INPUT PROCEDURES*/
void (*ReadIOchip)(int Chip_no);
void (*ReadAllIO)(void);
void (*ReadIOchannel)(int Channel_no);

/*6 BIT DAC CONVERTER PROCEDURES*/
void (*OutputDACchannel)(int Channel_no, int Data);
void (*UpdateDACchannel)(int Channel_no);
void (*ClearDACchannel)(int Channel_no);
void (*SetDACchannel)(int Channel_no);
void (*UpdateDACchip)(int Chip_no);
void (*ClearDACchip)(int Chip_no);
void (*SetDACchip)(int Chip_no);
void (*UpdateAllDAC)(void);
void (*ClearAllDAC)(void);
void (*SetAllDAC)(void);

/*8 BIT DA CONVERTER PROCEDURES*/
void (*OutputDAchannel)(int Channel_no, int Data);
void (*UpdateDAchannel)(int Channel_no);
void (*ClearDAchannel)(int Channel_no);
void (*SetDAchannel)(int Channel_no);
void (*UpdateAllDA)(void);
void (*ClearAllDA)(void);
void (*SetAllDA)(void);

/*8 BIT AD CONVERTER PROCEDURES*/
void (*ReadADchannel)(int Channel_no);
void (*ReadADchip)(int Chip_no);
void (*ReadAllAD)(void);

/*GENERAL PROCEDURES*/
void (*ReadAll)(void);
void (*ReadCard)(int Card_no);
void (*UpdateAll)(void);
void (*UpdateCard)(int Card_no);

/*I2C BUS CONDITIONS*/
void (*SelectI2CprinterPort)(int Printer_no);
void (*I2CBusNotBusy)(void);

bool _LoadDLLFunction(LPCTSTR name, FARPROC &function)
{
function= GetProcAddress(ghInstance, name);

if( !function )
{
char message[500];

sprintf(message, "La fonction '%s' n'a pas pu être chargée à partir de la DLL", name);
MessageBox(NULL, message, "Fonction non trouvée", MB_ICONERROR);
}

return ( function )?true:false;
}

#define LoadDLLFunction(name) _LoadDLLFunction(#name, (FARPROC &)name)

BOOL APIENTRY DllMain(HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved)
{
switch(ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
if( !gbLibraryLoaded )
{
ghInstance= LoadLibrary(".\\K8000.dll");

if( ghInstance )
{
if( LoadDLLFunction(LitIOdata)
&& LoadDLLFunction(LitIO)
&& LoadDLLFunction(DecToBin)
&& LoadDLLFunction(BintoDec)
&& LoadDLLFunction(DecToHex)
&& LoadDLLFunction(HexToDec)
&& LoadDLLFunction(ConfigAllIOasInput)
&& LoadDLLFunction(ConfigAllIOasOutput)
&& LoadDLLFunction(ConfigIOchipAsInput)
&& LoadDLLFunction(ConfigIOchipAsOutput)
&& LoadDLLFunction(ConfigIOchannelAsInput)
&& LoadDLLFunction(ConfigIOchannelAsOutput)
&& LoadDLLFunction(UpdateIOdataArray)
&& LoadDLLFunction(ClearIOdataArray)
&& LoadDLLFunction(SetIOdataArray)
&& LoadDLLFunction(SetIOchArray)
&& LoadDLLFunction(ClearIOchArray)
&& LoadDLLFunction(IOoutput)
&& LoadDLLFunction(UpdateAllIO)
&& LoadDLLFunction(ClearAllIO)
&& LoadDLLFunction(SetAllIO)
&& LoadDLLFunction(UpdateIOchip)
&& LoadDLLFunction(ClearIOchip)
&& LoadDLLFunction(SetIOchip)
&& LoadDLLFunction(SetIOchannel)
&& LoadDLLFunction(ClearIOchannel)
&& LoadDLLFunction(ReadIOchip)
&& LoadDLLFunction(ReadAllIO)
&& LoadDLLFunction(ReadIOchannel)
&& LoadDLLFunction(OutputDACchannel)
&& LoadDLLFunction(UpdateDACchannel)
&& LoadDLLFunction(ClearDACchannel)
&& LoadDLLFunction(SetDACchannel)
&& LoadDLLFunction(UpdateDACchip)
&& LoadDLLFunction(ClearDACchip)
&& LoadDLLFunction(SetDACchip)
&& LoadDLLFunction(UpdateAllDAC)
&& LoadDLLFunction(ClearAllDAC)
&& LoadDLLFunction(SetAllDAC)
&& LoadDLLFunction(OutputDAchannel)
&& LoadDLLFunction(UpdateDAchannel)
&& LoadDLLFunction(ClearDAchannel)
&& LoadDLLFunction(SetDAchannel)
&& LoadDLLFunction(UpdateAllDA)
&& LoadDLLFunction(ClearAllDA)
&& LoadDLLFunction(SetAllDA)
&& LoadDLLFunction(ReadADchannel)
&& LoadDLLFunction(ReadADchip)
&& LoadDLLFunction(ReadAllAD)
&& LoadDLLFunction(ReadAll)
&& LoadDLLFunction(ReadCard)
&& LoadDLLFunction(UpdateAll)
&& LoadDLLFunction(UpdateCard)
&& LoadDLLFunction(SelectI2CprinterPort)
&& LoadDLLFunction(I2CBusNotBusy) )
gbLibraryLoaded= true;
else
{
FreeLibrary(ghInstance);
return FALSE;
}
}
}
break;

case DLL_PROCESS_DETACH:
if( gbLibraryLoaded )
if( FreeLibrary(ghInstance) )
gbLibraryLoaded= false;
break;

case DLL_THREAD_ATTACH:
break;

case DLL_THREAD_DETACH:
break;
}

return TRUE;
}


Si tu veux, passe moi le source qui utilise la DLL, et les fichiers à metaos@free.fr et je te ferais la liaison avec la DLL.

Core Breaker


-------------------------------
Réponse au message :
-------------------------------

> Bonjour a tous,
>
> QUESTIONS :
> - Comment utiliser les classes, varaibles, constantes et fonctions dans une DLL sous VC++?
> - Est-ce t'il existe un tutoriel simple et précis (je ne suis pas expert!!) qui puisse me guider?
> - Est-ce que quelqu'un à un exemple de code simple qui montre comment faire?
> - Je suis pret à prendre un tut en anglais (ma copine me le traduira si necessaire!)
>
> En effet, je voudrais piloter un appareil. Je ne dispose que de la DLL, du .H mais pas d .LIB .
> Cette DLL contient l'ensemble des classes, variables et fonctions qui sont necessaire au pilotage de cet appareil. Je ne dispose d'aucune doc autre que le header (et encore il est en japonnais!!)
>
> Je sais que la question a très certainement été mainte fois aborté, mais je ne trouve pas de solution. On m'a bien filé les MSDNs en me disant que tout était dedans, mais ne parlant que très sommairement anglais, c'est une véritable galère pour trouver ce que je cherche.
>
> Lors de mes recherches, chaque fois que l'on parle d'utiliser les fonctions d'une DLL, il faut disposer du Header, de la DLL et du .LIB (et c'est là que le bas blesse!!)
>
> VieuxLion a écrit un article interessant sur les plugins, mais ce n'est pas ce que je cherche. (http://www.cppfrance.com/article.aspx?Val=1400).
> Il y a aussi cette fameux post de Xs : CREER et UTILISER des DLLs (http://www.cppfrance.com/article.aspx?Val=871), mais là aussi la question reste en suspend quant à l'utilisation de DLLs externes.
>
> PS : Pour des raisons de compatibilité, je dois utiliser Visual C++ 6.0.
>
> STEF
>


Cette discussion est classée dans : dll, utiliser, article, fonctions, tiers


Répondre à ce message

Sujets en rapport avec ce message

Comment utiliser une DLL tiers? [ par StefB ] Bonjour a tous,QUESTIONS : - Comment utiliser les classes, varaibles, constantes et fonctions dans une DLL sous VC++?- Est-ce t'il existe un tutoriel DLL et fenetre de dialogue [ par ricky78 ] Bonjour J'essaye pour la premiere fois de mettre des fonctions de mon code dans une DLL. Sur differents tutoriel et aide j'arrive bien a cree et a uti comment utiliser les fonctions d'une dll [ par kollibar ] bonjour je veux utiliser les fonctiopns d'une dll de façon dynamique que j'ai créer, je me suis inspiré d'autres source mais je ne comprend pas pourq Utiliser les fonctions contenues dans des classes d'une DLL [ par romauto750 ] Bonjour à tous,Je me tourne vers vous car je dois utiliser les fonctions d'une dll. Le problème c'est que dans cette dll, il y a plusieurs classes. Je problème pour utiliser une DLL en C [ par aurhas ] Bonjour, j'ai une DLL FTDI pour laquelle je dispose des fichiers dll, lib et h. J'ai également une doc pour décrire les fonctions, leurs paramètres e Exporter une class depuis une DLL et l'utiliser dans un programme quelconque [ par Havy ] DLL contenant la classe (Maths.dll) #define DllExport __declspec (dllexport)class DllExport Test{    private: int nombre;    public: int Carre(in Comment utiliser "loadFrom" dans un manifest d'une application [ par braxivamov ] Bonjour, pour faire simple j'ai recodé quelques dll du style gdi32.dll. J'ai exporté les fonctions de la dll originale, j'ai remplacé le fonctionneme Code::Block DLL pour l'utiliser dans VB [ par runo ] Bonjour, je souhaite créer une DLL en C (ou C++) avec Code::Block que j'utiliserai ensuite sous VB (en fait excel 2003)... Je crée donc mon projet DL utiliser un code C sous Matlab (Linux) [ par piboue ] Bonjour, je souhaite utiliser un code C sous matlab comme une fonction classique (input/ouput). A l'origine, ce code a été compiler (je sais pas si c' Probleme DLL sous Visual 2008 [ par romainbisson ] Bonjour, J'ai un fichier DLL contenant toutes les fonctions en C me permettant de travailler sur mon projet (pilotage d'un boitier RFID). Ma question


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales