De manière générale, il existe trois façons de programmer ensemble entre VB et VC : l'une consiste à générer une DLL dans VC et à appeler la DLL dans VB ; l'autre consiste à générer un contrôle ActiveX (.ocx) dans VC et à l'insérer dans VB ; l'autre consiste à créer une DLL dans VC Generate ActiveX Automation server en VB et à l'appeler en VB. Relativement parlant, la première méthode a les exigences les plus faibles pour les programmeurs VC, mais nécessite la coopération de vos partenaires. Je recommande cette méthode.
Parlons d’abord de la programmation VC++. Générez d’abord le projet DLL Win32 dans VC++. Ajoutez plusieurs fonctions à ce projet que les utilisateurs de VB pourront appeler. Pour qu'une fonction dans une DLL soit appelée par VB, elle doit remplir deux conditions : l'une est que la méthode appelante soit stdcall, et l'autre est qu'elle doit être exportée. Pour faire le premier, ajoutez simplement le mot-clé __stdcall avant la déclaration de la fonction. comme:
court échantillon __stdcall (court nLen, court *buffer)
Pour faire la seconde, vous devez ajouter les lignes suivantes au fichier *.def :
EXPORTATIONS
échantillon @1
L'exemple ici est le nom de la fonction que vous souhaitez appeler en VB, @1 représente le numéro de la fonction dans la DLL et chaque fonction est différente. Notez que les noms de fonctions ici sont sensibles à la casse. Quant à la nécessité de transférer une grande quantité de données, vous pouvez le faire, utiliser un tableau pour stocker les données dans VB, puis transmettre la taille et l'adresse du tableau à VC (pour ce qui est de la programmation en VB, je vais présentez-le ci-dessous). Tout comme l'exemple ci-dessus, nLen est la taille du tableau et buffer est l'adresse du tableau. Avec ces deux éléments, vous pouvez le traiter comme un tableau VC. Quant aux graphiques de sortie, vous pouvez générer le format WMF ou BMP et laisser VB l'appeler. Cependant, je pense qu'il peut également être affiché directement dans la fenêtre, à condition que VB transmette les poignées de fenêtre hWnd et hDC et la position de dessin de la fenêtre (les systèmes de coordonnées utilisés par VB et VC doivent être cohérents) à VC. La propriété AutoRedraw de VB doit être False et le programme de dessin VC est appelé dans l'événement Paint.
Parlons à nouveau de la programmation VB. La méthode permettant à VB d'appeler la DLL est la même que la méthode d'appel de l'API Windows, qui est généralement présentée dans les livres VB. Pour l'exemple ci-dessus, déclarez d'abord la fonction VC :
Déclarer l'exemple de fonction Lib "mydll.dll" (ByVal nLen sous forme d'entier, tampon sous forme d'entier) sous forme d'entier
Ici mydll.dll est le nom de votre dll. Vous avez peut-être remarqué que les deux paramètres sont déclarés différemment, ByVal étant ajouté au premier paramètre. La règle est la suivante : si un paramètre est déclaré comme pointeur ou tableau dans VC, ByVal ne sera pas ajouté, sinon ByVal sera ajouté. L'appel de cette fonction en VB utilise la syntaxe suivante :
échantillon 10, a(0)
Le tableau a() ici est utilisé pour stocker des données, et 10 est la longueur du tableau. Le deuxième paramètre ici ne peut pas être a(), mais doit être le premier des données à transmettre. C'est la clé de la programmation VB.
Vous trouverez ci-dessous quelques problèmes possibles que vous pourriez rencontrer. Un problème est que VB peut signaler que la DLL est introuvable. Vous pouvez placer la DLL dans le répertoire système et vous assurer que l'instruction Declare de VB est correcte. Un autre problème est que VB signale qu'il ne trouve pas la fonction requise. Cela est généralement dû au fait que le fichier *.def n'est pas défini dans VC. La troisième situation est que VB vous indique que la conversion ne peut pas être effectuée. Cela peut être dû au fait que le mot clé __stdcall n'est pas ajouté dans VC, ou il se peut que les types de paramètres de VB et VC soient incohérents. Notez que int dans VC est 4. octets (équivalent à VB Long), alors que l'entier de VB ne fait que 2 octets. Il faut s'assurer que le nombre de paramètres dans VB et VC est le même et que le nombre d'octets qu'ils occupent est également le même. La dernière chose à laquelle il faut faire attention est que le tableau ne doit pas dépasser les limites de VC, sinon le programme VB plantera.
1. Avantages de l'appel de DLL
En tant que fondement du système d'exploitation Windows, la bibliothèque de liens dynamiques (DLL) offre des performances applicatives supérieures :
Les DLL étendent les fonctionnalités d'une application. Étant donné qu'une DLL est chargée dynamiquement dans l'espace d'adressage d'un processus, une application peut déterminer au moment de l'exécution quelles opérations doivent être effectuées, puis charger le code approprié pour effectuer ces opérations selon les besoins.
Les DLL peuvent être écrites dans une variété de langages. Par exemple, VB est utilisé pour écrire l'interface du programme d'application et C++ est utilisé pour écrire des opérations sous-jacentes telles que des algorithmes et des communications.
Les DLL simplifient la gestion des projets logiciels. Si différents groupes de travail travaillent sur différents modules lors du développement logiciel, le projet est plus facile à gérer.
La DLL permet d'économiser de la mémoire. Si deux applications ou plus utilisent la même DLL, les pages de la DLL ne doivent être placées qu'une seule fois dans la RAM et toutes les applications peuvent partager ses pages individuelles.
La DLL facilite le partage des ressources. Les DLL peuvent contenir des ressources telles que des modèles de boîtes de dialogue, des chaînes, des icônes et des bitmaps, et plusieurs applications peuvent utiliser des DLL pour partager ces ressources.
La DLL aide à la localisation des applications. Par exemple, une application qui contient uniquement du code et aucun composant d’interface utilisateur peut charger une DLL contenant des composants d’interface utilisateur localisés.
Les DLL aident à résoudre les différences entre les plates-formes. Différentes versions de Windows sont équipées de différentes fonctions et les développeurs souhaitent souvent appeler de nouvelles fonctions. Cependant, si le code source contient un appel à une nouvelle fonction et que l'application doit être exécutée sur une version de Windows qui ne fournit pas cette fonction, le chargeur du système d'exploitation refusera d'exécuter le processus. Si ces nouvelles fonctions sont enregistrées dans une DLL, l'application peut les charger dans les anciennes versions de Windows et appeler la fonction avec succès.
2. Trouver le point d'entrée de la DLL
Les utilisateurs qui entrent en contact avec des DLL pour la première fois rencontrent souvent un problème : une DLL créée dans un environnement VC fonctionne correctement dans VC, mais lorsqu'elle est appelée dans une application VB, l'entrée "erreur de convention d'appel" ou "introuvable" apparaît toujours. erreurs ponctuelles. Ceci est principalement dû aux omissions suivantes.
Tout d'abord, il convient de noter que la déclaration de fonction dans la DLL et la déclaration de fonction dans VB doivent être exactement les mêmes en termes de nom, de type de retour, de type de paramètre, de nombre de paramètres, etc. Portez une attention particulière à la question de capitalisation.
Deuxièmement, la fonction de saisie doit être ajoutée au fichier .def de la DLL.
Enfin, les mots-clés extern "c" et _stdcall doivent être ajoutés avant la définition de la fonction.
Veuillez vous référer à l'exemple d'application pour le format spécifique.
3. Passer les paramètres du tableau dans la DLL
Étant donné que la DLL est souvent utilisée pour effectuer certaines opérations de bas niveau, les applications doivent souvent transmettre une grande quantité de données à la DLL. En C++, les pointeurs sont le meilleur choix pour les opérations sur les tableaux, mais il n'y a pas de concept de pointeurs en VB. Cela peut généralement être résolu de deux manières.
Tout d'abord, lors de la déclaration d'une DLL en VB, utilisez byref au lieu de byval pour transmettre le pointeur de tableau vers la DLL.
De plus, en déclarant le tableau comme variante, vous pouvez directement transmettre le tableau à la DLL.
4. Exemples d'applications
Ce qui suit utilise un exemple spécifique pour illustrer le processus d'appel d'une DLL créée dans un environnement VC dans VB.
Créez une DLL pour le traitement du signal, "SigPro.dll", qui contient une fonction "Fourier" pour les calculs de Fourier.
Déclaration en VC :
Ajoutez le code suivant à "SigPro.h",
Copiez le code comme suit :
externe "C"
{
double EXPORT _stdcall Fourier (long int *Sample,int NumSam,int OvertoneOrder,bool SinOrCos);
}
Ajoutez le code suivant à "SigPro.cpp",
externe "C"
double EXPORT _stdcall Fourier (long int *Sample,int NumSam,int OvertoneOrder,bool SinOrCos)
{
int je;
double résultat = 0,0 ;
si(SinOrCos==true)
{
pour(i=0;i<NumSam;i++)
{
result=result+*(Sample+i)*cos(OvertoneOrder*i*2*3.1415926/NumSam);
}
}
autre
{
pour(i=0;i<NumSam;i++)
{
result=result+*(Sample+i)*sin(OvertoneOrder*i*2*3.1415926/NumSam);
}
}
résultat =résultat*2/NumSam ;
renvoyer le résultat ;
}
Ajoutez le code suivant à "SigPro.def",
EXPORTATIONS
Fourier
Instruction d'appel en VB :
Fonction de déclaration publique Fourier Lib "SigPro" (ByRef Sample() As Long, ByVal NumSam As Integer, ByVal OvertoneOrder As Integer, ByVal SinOrCos As Boolean) As Double