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