Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1775 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  DLL Visual C++ 2005 To VBA-Excel

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

DLL Visual C++ 2005 To VBA-Excel

n°1551406
andrea13ne​w
Posté le 30-04-2007 à 12:44:11  profilanswer
 


 
Salut,
 
Je cherche un exemple de:
-Création d'une DLL sous Visual C++ 2005
-Utilisation de cette DLL sous VBA-Excel
 
Je n'ai rien trouvé de clair sur le net  :D  
Merci beaucoup :)

mood
Publicité
Posté le 30-04-2007 à 12:44:11  profilanswer
 

n°1551880
Trap D
Posté le 01-05-2007 à 18:45:51  profilanswer
 

Ben je suppose qu'en faisant un Declare Function my_function lib "my_dll" (.......) ça doit le faire.
Comme par exemple dans cet exemple trouvé sur le net :
"Declare Function lstrlenA Lib "Kernel32" (ByVal lpString As Any) As Long"
Au fait, tu sais écrire des Dll ?


Message édité par Trap D le 01-05-2007 à 18:46:27
n°1551977
andrea13ne​w
Posté le 01-05-2007 à 22:54:17  profilanswer
 


Merci :)  
Justement plus de pb pour appeler une dll à partir de VBA , mais justement je ne sais pas écrire de dll  :(

n°1551987
andrea13ne​w
Posté le 02-05-2007 à 00:26:03  profilanswer
 

Bon voici ce que j'ai fait:
 
J'ai créé un nouveau projet:  
-CLR  
-Class Library
 
Je l'ai appelé test.
 
J'aimerais exporter une fonction qui prends un double et qui renvoit ce double +1 (par exemple).
 
J'ajoute donc dans le fichier test.h la déclaration de ma fonction:
 

Code :
  1. // test.h
  2. #pragma once
  3. using namespace System;
  4. _declspec(dllexport) double _stdcall fct (double x);
  5. namespace test {
  6. public ref class Class1
  7. {
  8.  // TODO: Add your methods for this class here.
  9. };
  10. }


 
J'ajoute dans le fichier test.cpp la définition de ma fonction:
 

Code :
  1. //test.cpp
  2. // This is the main DLL file.
  3. #include "stdafx.h"
  4. #include "test.h"
  5. _declspec(dllexport) double _stdcall fct (double x){
  6. return x+1;
  7. }


 
Je compile...


Message édité par andrea13new le 02-05-2007 à 07:47:41
n°1551988
andrea13ne​w
Posté le 02-05-2007 à 00:30:03  profilanswer
 

Ceci me crée un fichier test.dll, ma dll...
 
Je crée un projet sous VBA, avec un module contenant:
 
 
Public Declare Function DLLfonction Lib "D:\Visual Studio 2005\Projects\test\debug\test.dll" Alias "fct" (ByVal x As Double) As Double
 
 
Sub dlltest()
 
Dim x As Double
x = 1
Cells(1, 1) = DLLfonction(1)
 
End Sub
 
Je crée un bouton de commande qui lance ma dll depuis la feuille excel.
 
-> message d'erreur:  
 
Erreur d'exécution '453':
 
Point d'entrée fct d'une DLL introuvable dans D:\Visual Studio 2005\Projects\test\debug\test.dll.

 
 :(  

n°1551994
andrea13ne​w
Posté le 02-05-2007 à 01:10:13  profilanswer
 

Dois-je déclarer ma fonction comme une méthode de la classe Class1 ?  
 
J'ai vu la notion de table d'exportation et de décoration du nom de fonction, qu'on peut corriger en rajoutant un fichier .def (mais pas avec Visual C++ 2005), dois-je faire quelque chose de similaire ?  
 
Merci de votre aide je vais chercher   :)

n°1552842
andrea13ne​w
Posté le 03-05-2007 à 00:42:37  profilanswer
 


 [:autobot]

n°1552905
Trap D
Posté le 03-05-2007 à 08:51:09  profilanswer
 

Peut-être qu'en faisiant un  
extern "C" __declspec( dllexport )  
ça marchera mieux.

n°1552911
andrea13ne​w
Posté le 03-05-2007 à 08:55:39  profilanswer
 


Merci,  
mais ça n'a pas l'air de changer quelque chose...

n°1552940
Trap D
Posté le 03-05-2007 à 09:27:54  profilanswer
 

Bizarre, bizarre...
Le mot "double" a-t-il la même signification en C et en VBA ?


Message édité par Trap D le 03-05-2007 à 09:29:30
mood
Publicité
Posté le 03-05-2007 à 09:27:54  profilanswer
 

n°1552943
andrea13ne​w
Posté le 03-05-2007 à 09:33:02  profilanswer
 


Oui  
Mais je crois que n'ayant que la version Express de Visual C++, je ne peux créer que des dlls .NET...  

n°1552970
Trap D
Posté le 03-05-2007 à 10:02:16  profilanswer
 

Alors là, je ne peux pas t'aider, désolé.

n°1553108
andrea13ne​w
Posté le 03-05-2007 à 13:19:36  profilanswer
 


Merci de ton aide tout de même.
@+

n°1555532
andrea13ne​w
Posté le 04-05-2007 à 19:45:43  profilanswer
 


 
Je n'ai pas eu le temps d'avancer.
J'ai donc deux questions.
1- Puis-je créer des DLLs classiques win32 avec le compilateur Visual C++ 2005 Express ?  
2- Comment créer des DLLs .NET, et comment les appeler depuis VBA ?  

n°1555579
Trap D
Posté le 04-05-2007 à 22:11:25  profilanswer
 

andrea13new a écrit :

Je n'ai pas eu le temps d'avancer.
J'ai donc deux questions.
1- Puis-je créer des DLLs classiques win32 avec le compilateur Visual C++ 2005 Express ?  
2- Comment créer des DLLs .NET, et comment les appeler depuis VBA ?


Aucune idée pour les deux questions.  :(  
Pose ta question sur le forum .net

n°1555589
andrea13ne​w
Posté le 04-05-2007 à 22:47:58  profilanswer
 


Bonne idée merci:)

n°1555614
IrmatDen
Posté le 05-05-2007 à 04:02:26  profilanswer
 

Pour la première question, la réponse est oui. Aucune idée pour la 2nde, par contre...

n°1555632
andrea13ne​w
Posté le 05-05-2007 à 09:57:28  profilanswer
 


Ah bon ?
Mais quand je veux créer un nouveau projet je n'ai pas le choix pour les Dlls de faire une Win32, tu es sur ?

n°1555677
IrmatDen
Posté le 05-05-2007 à 13:37:53  profilanswer
 

Certain. Je suis sur Linux maintenant, mais à mon prochain retour sous windows (à un moment ou un autre dans la journée, pas de souci ;)), je regarderais les réglages de mon projet...

n°1555709
andrea13ne​w
Posté le 05-05-2007 à 14:47:52  profilanswer
 


Je me suis débrouillé en installant la plate-forme SDK, je peux maintenant effectivement créer des DLLs Win32, reste à apprendre à le faire !

n°1555807
andrea13ne​w
Posté le 05-05-2007 à 19:06:26  profilanswer
 


 
Donc voila j'ai crée un projet Win32, DLL.
J'ai ajouté une fonction fct, que j'aimerais exporter sous VBA.
 
 

Code :
  1. // stdafx.h : include file for standard system include files,
  2. // or project specific include files that are used frequently, but
  3. // are changed infrequently
  4. //
  5. #pragma once
  6. // Modify the following defines if you have to target a platform prior to the ones specified below.
  7. // Refer to MSDN for the latest info on corresponding values for different platforms.
  8. #ifndef WINVER    // Allow use of features specific to Windows XP or later.
  9. #define WINVER 0x0501  // Change this to the appropriate value to target other versions of Windows.
  10. #endif
  11. #ifndef _WIN32_WINNT  // Allow use of features specific to Windows XP or later.                   
  12. #define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
  13. #endif
  14. #ifndef _WIN32_WINDOWS  // Allow use of features specific to Windows 98 or later.
  15. #define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later.
  16. #endif
  17. #ifndef _WIN32_IE   // Allow use of features specific to IE 6.0 or later.
  18. #define _WIN32_IE 0x0600 // Change this to the appropriate value to target other versions of IE.
  19. #endif
  20. #define WIN32_LEAN_AND_MEAN  // Exclude rarely-used stuff from Windows headers
  21. // Windows Header Files:
  22. #include <windows.h>
  23. // TODO: reference additional headers your program requires here


 
 
 

Code :
  1. //dll_fichier.h
  2. #define EXPORT __declspec(dllexport) // définit la macro EXPORT
  3. EXPORT double __stdcall fct(); // spécifie que cette fonction est à exporter


 
 

Code :
  1. // a simple Dll project.cpp : Defines the entry point for the DLL application.
  2. //dll_fichier.cpp
  3. #include "stdafx.h"
  4. #include "dll_fichier.h"
  5. #ifdef _MANAGED
  6. #pragma managed(push, off)
  7. #endif
  8. BOOL APIENTRY DllMain( HMODULE hModule,
  9.                        DWORD  ul_reason_for_call,
  10.                        LPVOID lpReserved
  11.      )
  12. {
  13.     return TRUE;
  14. }
  15. double  __stdcall fct(){
  16. return 5;
  17. }
  18. #ifdef _MANAGED
  19. #pragma managed(pop)
  20. #endif


 
 
 

Code :
  1. // stdafx.cpp : source file that includes just the standard includes
  2. // a simple Dll project.pch will be the pre-compiled header
  3. // stdafx.obj will contain the pre-compiled type information
  4. #include "stdafx.h"
  5. // TODO: reference any additional headers you need in STDAFX.H
  6. // and not in this file


 
 
Sous VBA, j'ai le même pb qu'au début, le point d'entrée de ma DLL est introuvable..  :sweat:  

n°1555905
Trap D
Posté le 06-05-2007 à 01:04:21  profilanswer
 

Essaye le extern "C"...

n°1555928
andrea13ne​w
Posté le 06-05-2007 à 09:53:19  profilanswer
 


J'ai vu la notion de table d'exportation et de décoration du nom de fonction, qu'on peut corriger en rajoutant un fichier .def mais je ne vois pas comment rajouter un fichier .def dans mon environnement Visual C++.
 

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  DLL Visual C++ 2005 To VBA-Excel

 

Sujets relatifs
recherche d une valeur et copie sous excel[Résolu] Exécution de Visual Studio lors de crash des applis ?!
Faire apparaitre un Bouton d'une macro sous excel sous conditionImpression avec Excel dans un fichier externe
Programmes VBAEcriture dans un fichier Excel
Creer un exe autonome sous Visual studio 2005VBA - Détecter commande "Imprimer" dans Excel
Plus de sujets relatifs à : DLL Visual C++ 2005 To VBA-Excel


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR