dll en C compatible vb6

dll en C compatible vb6 - C - Programmation

Marsh Posté le 27-12-2024 à 15:50:19    

Bonjour,
je suis à le recherche d'aide pour apprendre à faire une DLL en C pour être utilisée sous "VB6".
un exemple simple calculant la somme de deux nombres par exemple.
J'ai essayé cet exemple :

Code :
  1. // ExampleDLL.h
  2. #ifndef EXAMPLEDLL_H
  3. #define EXAMPLEDLL_H
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. export void __stdcall(dllexport) int Add(int a, int b);
  8. #ifdef __cplusplus
  9. }
  10. #endif
  11. #endif // EXAMPLEDLL_H
  12. // ExampleDLL.cpp
  13. #include "windows.h"
  14. #include "ExampleDLL.h"
  15. extern "C" {
  16. export void __stdcall int Add(int a, int b) {
  17.         return a + b;
  18.     }
  19. }


 
LIBRARY ExampleDLL
EXPORTS
    Add
 
 
'ExampleVB6.bas
Declare Function Add Lib "ExampleDLL.dll" (ByVal a As Integer, ByVal b As Integer) As Integer
 
Sub TestDLL()
    Dim result As Integer
    result = Add(3, 4)
    MsgBox "Result: " & result
End Sub

Reply

Marsh Posté le 27-12-2024 à 15:50:19   

Reply

Marsh Posté le 27-12-2024 à 16:47:24    

Et quel est le problème exact?
 
Sinon le VB6 c'est vieux comme le monde non? Si c'est pour développer un nouveau truc je conseillerais de partir sur un language plus récent.


---------------
Ne laissez pas mourir vos sujets en cours de route!
Reply

Marsh Posté le 28-12-2024 à 23:38:48    

Oui, au delà de l'intérêt pédagogique de comprendre l'export dll C++ pour exposer à VB c'est quoi l'objectif d'apprendre à faire du VB6 aujourd'hui ?
Rien que l'IDE doit être galère à faire tourner sous W10 / 11 j'imagine.
Si tu veux faire du VB et que ça n'est pas pour maintenir un truc des années 90 (!) fais au moins du VB .Net. Ou encore mieux, pas de VB du tout.

 

Et effectivement si ça marche pas faut préciser un peu parce que là y a pas de question :o
Au pifomètre je dirais que ta DLL n'est pas compilée avec les bonnes options pour exporter, ou que l'import de la référence côté VB n'est pas bon :o


Message édité par TotalRecall le 28-12-2024 à 23:40:11

---------------
Topic .Net - C# @ Prog
Reply

Marsh Posté le 31-12-2024 à 16:05:14    

Pourquoi tu m'as répondu par MP? Faut répondre ici dans le sujet...


---------------
Ne laissez pas mourir vos sujets en cours de route!
Reply

Marsh Posté le 31-12-2024 à 16:54:17    

Tiens c'est marrant j'allais lui dire la même chose, on a dû recevoir le même MP :d
 
Et qui (pour le mien en tout cas) ne répond pas aux remarques. Genre est ce qu'il y a bien les __declspec, /EXPORT et autres machins que j'ai oublié quelque part entre 2005 et 2010 :o


---------------
Topic .Net - C# @ Prog
Reply

Marsh Posté le 31-12-2024 à 18:24:06    

Je suis étonné qu'on vienne poser une question ici à l'heure de chatgpt ou équivalent :o
 

Reply

Marsh Posté le 31-12-2024 à 18:39:57    

Spafo. Surtout qu'à mon avis il se rappellera mieux que nous des subtilités de ces manips des temps anciens.


---------------
Topic .Net - C# @ Prog
Reply

Marsh Posté le 31-12-2024 à 18:43:22    

TotalRecall a écrit :

Spafo. Surtout qu'à mon avis il se rappellera mieux que nous des subtilités de ces manips des temps anciens.


 
j'ai pas pu m'empêcher de le faire :o
 
Bon après ,j'ai pas vb6 , je peux pas tester. Je serais lui, je le ferais plutôt en python  :jap:  
 

Code :
  1. // DLL : AddFunction.dll
  2. // add_function.cpp
  3. #include "pch.h"  // Si vous utilisez Visual Studio, cela est nécessaire.
  4. #include <windows.h>
  5. extern "C" __declspec(dllexport) int Add(int a, int b) {
  6.     return a + b;
  7. }
  8. // DllMain : Point d'entrée de la DLL
  9. BOOL APIENTRY DllMain(HMODULE hModule,
  10.                       DWORD  ul_reason_for_call,
  11.                       LPVOID lpReserved) {
  12.     switch (ul_reason_for_call) {
  13.     case DLL_PROCESS_ATTACH:
  14.     case DLL_THREAD_ATTACH:
  15.     case DLL_THREAD_DETACH:
  16.     case DLL_PROCESS_DETACH:
  17.         break;
  18.     }
  19.     return TRUE;
  20. }
  21. // Commande de compilation (ligne de commande) :
  22. // msbuild /t:Build /p:Configuration=Release /p:Platform=x64 add_function.sln
  23. ' VB6 : Import et appel de la DLL '
  24. ' Dans VB6 '
  25. ' Declare Function Add Lib "AddFunction.dll" (ByVal a As Long, ByVal b As Long) As Long '
  26. ' Sub de test dans VB6 '
  27. ' Sub TestAdd() '
  28. '     Dim result As Long '
  29. '     result = Add(5, 7) '
  30. '     MsgBox "Le résultat est : " & result '
  31. ' End Sub

Reply

Marsh Posté le 03-01-2025 à 18:17:33    

je compile la dll avec ms vc++ 6.0
 
le cas suivant le plus simple  marche :  
 
Def.h
#include "windows.h"
#define export __declspec (dllexport)
 
export void __stdcall HelloWorld(void );
 
fichier.c
#include "Def.h"
 
void __stdcall HelloWorld(void )
{
    MessageBox(NULL,"Hello !","Message",MB_OK);
}
 
 .def
LIBRARY Fonctions
DESCRIPTION "Essai de dll"
EXPORTS
HelloWorld _HelloWorld@0
 
 
'dans module vb6
Private Declare Sub HelloWorld Lib "Fonctions.dll" ()
Private Sub Command1_Click()
HelloWorld
End Sub
 
 
 
 

Reply

Marsh Posté le 03-01-2025 à 18:31:46    

xilebo a écrit :

Je suis étonné qu'on vienne poser une question ici à l'heure de chatgpt ou équivalent :o
Bonjour,
figurez vous que je l'ai fait avant de m'orienter vers le forum.
chatGPT propose a proposé plusieurs réponses sans donner la solution.  :??:  


Reply

Marsh Posté le 03-01-2025 à 18:31:46   

Reply

Marsh Posté le 03-01-2025 à 18:38:11    

Bonjour :)
 
Meilleurs voeux.
 
Si chatgpt ne t'a pas donné une réponse correcte, c'est que la question était mal posée. Il faut parfois préciser 2-3 fois pour un résultat optimal. en tout cas, à une question aussi simple, il a forcément la réponse.

Reply

Marsh Posté le 03-01-2025 à 19:17:01    

Allez, je me suis prêté à l'exercice.
 
N'ayant pas visual studio chez moi ( qu'au travail), je viens d'installer la version visual studio 2022 community edition. Elle est gratuite et comme les autres membres te l'ont dit, il n'y a aucune raison objective pour lesquelles tu utiliserais encore visual studio 6.0 et VB6.0. Les rares cas encore utiles seraient de maintenir une vieille application écrite dans ce langage  et qui ne serait pas portable simplement.
 
Je doute que ce soit le cas ici pour toi, et que tu es dans le cadre d'un apprentissage, alors je t'invite à le faire avec des outils modernes. Tu trouveras visual studio community  2022 ici : https://visualstudio.microsoft.com/fr/vs/community/
 
Tu installes ca :  
 
https://i.imgur.com/p8kKqBCl.png
 
 
Ensuite, en posant 2-3 question à chatgpt, il m'a indiqué de faire les choses suivantes:  
 
1) créer un projet visual studio 2022 pour créer une dll en faisant -> Créer nouveau projet, et dans recherche taper : "Bibliothèque de lien dynamique avec exportation (DLL)".
 
Une fois ceci fait, il suffit de faire ceci :  
 
2) tu as un template deja créé, tu rajoutes ta fonction dll, tu configures le projet en release ( pas obligé )  
https://i.imgur.com/NfMI2GEl.png
 
3) et tu lances la compilation comme ça :  
 
 
https://i.imgur.com/8VKKUk5l.png
 
Tu obtiens alors ta dll dans le chemin que tu as donné pour ton projet.
 
4) tu crées un autre projet avec visual cette fois-ci de type  : Application Windows Forms (.NET) ( tu verras vb dans les tags du type de projet )  
 
5) tu rajoutes les quelques lignes de code ci-dessous, et tu crées un bouton  :  
 
https://i.imgur.com/r2w5M7Sl.png
 
 
Le programme a bien compilé, a bien chargé la dll, et lorsque je clique sur le bouton, il fait bien l'addition.
 
Conclusion :
 
 - 30sec pour poser la question à chatgpt
 - 10mn d installation de visual studio code
 - 5mn pour tout créer comme il faut ( les 2 projets )
 - 10mn pour rédiger ce message.
 
 
Bon courage :)

Reply

Marsh Posté le 05-01-2025 à 18:26:25    

Merci xilebo pour ton assistance et ta disponibilité, je passe à https://visualstudio.microsoft.com/fr/vs/community/
je verrai si ca marche avec vb6, car c'est de cela que qu'il s'agit.
Bonne année , meilleurs vœux.

Reply

Marsh Posté le 05-01-2025 à 19:07:50    

On a beau avoir été trois à insister sur le fait que VB6 c'est totalement obsolète, tu veux quand même partir là-dessus ?  
Tu veux bien nous dire dans quel contexte tu te retrouves à faire ça ? (aucune agression de ma part, simplement curieux :o)


---------------
Topic .Net - C# @ Prog
Reply

Marsh Posté le 05-01-2025 à 19:52:17    

TotalRecall a écrit :

On a beau avoir été trois à insister sur le fait que VB6 c'est totalement obsolète, tu veux quand même partir là-dessus ?  
Tu veux bien nous dire dans quel contexte tu te retrouves à faire ça ? (aucune agression de ma part, simplement curieux :o)


Pour ton information VB6 revient sous RADBASIC 100% compatible VB6 :
Encore un peu de temps pour la version finale :  https://www.patreon.com/c/radbasic/home
Je passe volontiers à visual studio 2000 (merci à xilebo), intéressant pour compiler des plugins pour XOJO "malgré son avarice en contrôles" que j'ai adopté en remplacement de VB6.
Initialement RealStudio, XOJO (Cross-platform Object Oriented) me convient personnellement.
La seule chose qu'il ne sait pas  faire , contrairement à  vb6 , c'est le COM Object de Microsoft très utile avec C/C++ et surtout matlab ...

Reply

Marsh Posté le 08-01-2025 à 10:55:46    

Je connais le projet radbasic, mais ça c'est beaucoup plus la réponse à comment tu comptes t'en servir plus que pourquoi tu le souhaites.
Même si la fin de ton post donne quelques indices.


Message édité par TotalRecall le 08-01-2025 à 10:56:22

---------------
Topic .Net - C# @ Prog
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed