est - il possible de créer une DLL avec visual basic (6) et de l'utiliser avec visual c++ (6) ?
si oui on fait comment? car je ne vois pas comment généré le fichier lib ou/et h.
est - il possible de créer une DLL avec visual basic (6) et de l'utiliser avec visual c++ (6) ?
si oui on fait comment? car je ne vois pas comment généré le fichier lib ou/et h.
bonjour
il faut charger la library dynamiquement.
par exemple si tu as une fonction de ta DLL du genretu cree un pointeur sur ta fonction avec:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 int GetListTag(int SrPortNo,BOOL axe1,BOOL axe2,BOOL axe3,BOOL axe4,BOOL axe5,BOOL axe6);
et des que tu as besoin de ta fonction
Code : Sélectionner tout - Visualiser dans une fenêtre à part typedef int (CALLBACK* LPFNGETTAG)(int,BOOL,BOOL,BOOL,BOOL,BOOL,BOOL);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 HINSTANCE hClcltr=LoadLibrary("madll.dll"); cordialement LPFNGETTAG lpfnGetTag; lpfnGetTag = (LPFNGETTAG)GetProcAddress(hClcltr,"GetListTag"); IdOk = lpfnGetTag (mynumport,0,1,0,0,0,0); // appel de la fonction FreeLibrary( hClcltr );
Il faut faire attention aux types utilisés dans ta fonction visual basic.
bonjour et merci beaucoup pour vos réponses,
j'ai fait un essai
en VBA j'ai une DLL qui à une fonction bob():
en visual c++ j'ai créé un projet vide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Public Function bob() MsgBox "hello" End Function
alors j'obtiens un programme qui plante méchament...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include<windows.h> typedef int (CALLBACK* LPFNGETTAG)(void); int main(void) { HINSTANCE hClcltr=LoadLibrary("dll_de_test.dll"); //cordialement LPFNGETTAG lpfnGetTag; lpfnGetTag = (LPFNGETTAG)GetProcAddress(hClcltr,"bob"); lpfnGetTag (); // appel de la fonction FreeLibrary( hClcltr ); return 0; }
ai-je oublié quelque chose?
merci d'avance
en VB, une dll c'est pas obligatoirement un objet COM ?
tout ce que je peux dire c'est que en visual basic j'appel la fonction de la dll comme ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Option Explicit Private Declare Function bob Lib "dll_de_test.dll" () As Long Private Sub Form_Load() Dim plop As Object Shell "regsvr32 /s dll_de_test.dll" Set plop = CreateObject("Nom_de_la_dll.Bibliotheque_1") plop.bob End Sub
j'ai remarqué que le projet sous visual basic est une dll activeX, c'est une vrai dll? ou c'est encore un truc inutilisable?
Ton code C++ ne vérifie pas les erreurs. Il suffit que la fonction bob n'existe pas pour que GetProcAddress renvoie NULL, et alors ça plante.
Commence par créer avec succès une dll normal en VB (-> forum VB), et verifie qu'elle exporte bien la fonction attentdue avec ça:
http://www.dependencywalker.com/
ensuite ton code C++ devrait fonctionner, une fois modifié pour tester les erreurs de chaque fonction.
Si tu ne peux créer que des ActiveX avec VB, hum, c'est pas gagné.
en fait il me faudrai l'inverse de ça (c'est à dire lire les dll de vb sn c++):
http://rp.developpez.com/vb/tutoriels/dll/
or j'ai lu qur les dll en visual basic sont en fait des activeX ...
vous pensez que c'est mort?
non, mais il faut faire autrement
c'est un projet MFC ?
je sais pas trop,
en fait je n'arrive pas, et un développeur est passer me voir, à utiliser une bibliotèque en c++ (c'est un fichier tlb), en fait j'ai déja poser des question dessu là:
http://www.developpez.net/forums/vie...779580#2779580
or comme on peux le lire, je n'ai aucun pb en visual basic avec cette bibliotèque. Or avec le travail que je dois réaliser, l'application devient déja lourde, sachant que en c++ je sais faire sans pb la même chose alors qu'en vb, je connais moins et je perd du tps, sans compter la lourdeur. bref je cherche à créer un dll en VB pouvant faire intermédiaire entre le programme que controlé par la librairie tlb et mon programme en c++.
As-tu une idée?
Un tlb, ça décrit un composant COM. On sort du cadre du C++, c'est de la programmation COM. Si tu utilises les MFC, avec #import (note que ce n'est pas une directive C++ standard, on est dans du spécifique COM avec VC++), VC++ va te générer des classes pour facilement te servir de ton ActiveX. Utilise ces classes, car sinon, c'est grosso modo infaisable.
Bien vu !Envoyé par nico-pyright(c)
Effectivement c'est une dll COM
Pour appeler la fonction bob() il faut appeler
*CoInitialize pour demarrer COM
*CoCreateInstanceEx avec comme param. le GUID de la dll
*QueryInterface sur le pointeur de bob()
Aller voir sur www.codeproject il ya peut-etre un exemple
Sinon il ya aussi avec #import dont parle Aurelien ou bien #pragma comment nom_dll
![]()
j'ai trouvé ça:
http://www.codeproject.com/com/vb_from_vc.asp
ça à l'aire bien
juste un etit mot pour dire qu'avec le tutorial que j'ai donné, ça marche nickel!!!!
Partager