Importation de fonctions

cs_andrealphus Messages postés 46 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 21 décembre 2004 - 15 mai 2003 à 11:03
cs_andrealphus Messages postés 46 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 21 décembre 2004 - 15 mai 2003 à 14:51
[mailto:david.leguillon@voila.fr 4ndr&@lphu$]

voila j'essaie d'importer des fonctions depuis une dll SANS .LIB (donc dynamiquement) mais j'ai un probleme lors de l'utilisation

PS (adressé à BruNews): est ce que tu à fais test que je t'ai demandé ds le dernier mail ???

10 réponses

crocejf2000 Messages postés 260 Date d'inscription lundi 27 janvier 2003 Statut Membre Dernière intervention 27 août 2008 1
15 mai 2003 à 11:09
C'est Quoi comme probleme. Faut que tu nous donne la partie loadlibrary.
Hart
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 mai 2003 à 11:24
bon je fais de suite mais je n'irai pas plus loin car ensuite c'est purement specifique a l'emploi de la dll et ce n'est plus mon probleme.
Je reste dispo pour les questions sur win32.
BruNews, ciao...
0
cs_andrealphus Messages postés 46 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 21 décembre 2004
15 mai 2003 à 11:37
[mailto:david.leguillon@voila.fr 4ndr&@lphu$]

voila le code:

typedef int (*IDN_OPENCOMM) (IDN_DRVOPEN *p_open);
typedef int (*IDN_CLOSECOMM) (int ixdrv);
typedef int (*IDN_SETNTDRIVER) (unsigned int address);

IDN_OPENCOMM IDN_OpenComm;
IDN_CLOSECOMM IDN_CloseComm;
IDN_SETNTDRIVER IDN_SetNTDriver;

void carte_A1010(HWND hWnd)
{
HINSTANCE hDll;
/**************************
chargement de la library
***************************/
hDll = LoadLibrary("idndll.dll");

/*****************************************
obtention des adresses des fonctions
******************************************/
IDN_OpenComm = (IDN_OPENCOMM) GetProcAddress(hDll,(LPCSTR)1);
IDN_CloseComm = (IDN_CLOSECOMM) GetProcAddress(hDll,(LPCSTR)2);
IDN_SetNTDriver = (IDN_SETNTDRIVER) GetProcAddress(hDll,(LPCSTR)32);

/****************************************
déclaration des différents fonctions pour
la connection / déconnection
*****************************************/
TCHAR szMerde[MAX_LOADSTRING];
IDN_DRVOPEN idn_drvopen;
int ixdrv=-1;
unsigned long address=(unsigned long)bnahextodw("378");
long baud=(long) 62500L ;
int err ;

/*******************************************************
installation du driver sur le port parallèle ( adr=378 )
********************************************************/
/* if ((err = IDN_SetNTDriver(address)) != IDN_E000)
{
LoadString(hInst,IDS_MERDE,szMerde,MAX_LOADSTRING);
MessageBox(hWnd,szMerde,"TEST_setntdriver",MB_OK | MB_ICONINFORMATION);
}*/

/*****************************************
réglages des parametres pour la connextion
******************************************/
memset((void *)&idn_drvopen, 0, sizeof(idn_drvopen)) ;
lstrcpy(idn_drvopen.NameDrv, DRV_LPT) ; // parallel port
idn_drvopen.address = address ; // indirizzo driver
idn_drvopen.tiplin = RS485 ;
idn_drvopen.tiput = INTERROGATION ; // tipo di utilizzo
idn_drvopen.baud = baud ; // baud rate
idn_drvopen.parity = NONE ; // parita'
idn_drvopen.bstop = 1 ; // bit di stop
idn_drvopen.wlen = 8 ; // lunghezza parola
idn_drvopen.macch = 1 ; // nome macchina (nodo)
idn_drvopen.nrip = 5 ; // numero massimo ripetizione blocco
idn_drvopen.tim2 = 2000 ; // tempo attesa dato (millisec)
idn_drvopen.tim1 = 2000 ; // tempo attesa ack (millisec)
idn_drvopen.tim4 = 5000 ; // tempo ripresa pallino (millisec)
idn_drvopen.tim3 = 3000 ; // tempo attesa result phase (millisec)
idn_drvopen.tim5 = 4000 ; // tempo attesa fifo libera per us1307 in giri di loop (2000 ok)
idn_drvopen.tim6 = 4000 ; // tempo attesa ack sulla fifo per us1307 in giri di loop (2000 ok)
idn_drvopen.tim7 = 4000 ; // tempo attesa dato sulla fifo per us1307 in giri di loop (2000 ok)
idn_drvopen.tim8 = 4000 ; // tempo attesa result ph in fifo per us1307 (millisec)
idn_drvopen.tim9 = 1 ; // count per ritardo a loop

/***************************
ouverture de la transmission
****************************/
/*if ((err = IDN_OpenComm(&idn_drvopen)) != IDN_E000)
{
LoadString(hInst,IDS_MERDE,szMerde,MAX_LOADSTRING);
MessageBox(hWnd,szMerde,"TEST_open_connection",MB_OK | MB_ICONINFORMATION);
}*/

ixdrv = idn_drvopen.ixdrv ; // library index


/***************************
fermeture de la transmission
****************************/
/* if ((err = IDN_CloseComm(idn_drvopen.ixdrv)) != 0)
{
LoadString(hInst,IDS_MERDE,szMerde,MAX_LOADSTRING);
MessageBox(hWnd,szMerde,"TEST_close_connection",MB_OK | MB_ICONINFORMATION);
}

ixdrv = -1 ; */

}

le pb c'est qu'il me dit qu'il y a une différence "call convention" entre le pointeur et la fonction. Si t'as la soluce...
hésite pas !
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 mai 2003 à 11:44
ici vu que tu mets une adresse en dur:
unsigned long address=(unsigned long)bnahextodw("378");
tu peux aussi bien mettre direct:
unsigned long address= 888;
ou
unsigned long address= 0x378;
BruNews, ciao...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_andrealphus Messages postés 46 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 21 décembre 2004
15 mai 2003 à 11:51
[mailto:david.leguillon@voila.fr 4ndr&@lphu$]

pas de pb merci mon bon BruNews
0
cs_andrealphus Messages postés 46 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 21 décembre 2004
15 mai 2003 à 11:53
[mailto:david.leguillon@voila.fr 4ndr&@lphu$]

c'est bien ce que je pensais mais il fo bien qu'elles soient utilisé tes fonctions pour etre dites utiles :)
@+
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 mai 2003 à 12:02
bon j'ai fait:
if(IDN_SetNTDriver(888)) MessageBox(...);
qui ne fut jamais affiche car XP m'a jete comme un malpropre.
BruNews, ciao...
0
cs_andrealphus Messages postés 46 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 21 décembre 2004
15 mai 2003 à 12:10
[mailto:david.leguillon@voila.fr 4ndr&@lphu$]

pourkoi 888, c'est cette adresse la sous XP ?
c'était koi comme erreur pour toi ?
@+
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 mai 2003 à 12:30
violation acces adr 0E014Ch
avec 0x3F8 pour address fait idem, BASTA.
Faut une doc bien faite, compatibilite XP, etc...
BruNews, ciao...
0
cs_andrealphus Messages postés 46 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 21 décembre 2004
15 mai 2003 à 14:51
[mailto:david.leguillon@voila.fr 4ndr&@lphu$]

je sais pas si ca marche sous XP, le driver est concu pour tourner sur 2000 et NT...
@+
0
Rejoignez-nous