DLL Visual C++ 2005 To VBA-Excel

DLL Visual C++ 2005 To VBA-Excel - C++ - Programmation

Marsh Posté le 30-04-2007 à 12:44:11    


 
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 :)

Reply

Marsh Posté le 30-04-2007 à 12:44:11   

Reply

Marsh Posté le 01-05-2007 à 18:45:51    

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
Reply

Marsh Posté le 01-05-2007 à 22:54:17    


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

Reply

Marsh Posté le 02-05-2007 à 00:26:03    

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
Reply

Marsh Posté le 02-05-2007 à 00:30:03    

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.

 
 :(  

Reply

Marsh Posté le 02-05-2007 à 01:10:13    

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   :)

Reply

Marsh Posté le 03-05-2007 à 00:42:37    


 [:autobot]

Reply

Marsh Posté le 03-05-2007 à 08:51:09    

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

Reply

Marsh Posté le 03-05-2007 à 08:55:39    


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

Reply

Marsh Posté le 03-05-2007 à 09:27:54    

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
Reply

Marsh Posté le 03-05-2007 à 09:27:54   

Reply

Marsh Posté le 03-05-2007 à 09:33:02    


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

Reply

Marsh Posté le 03-05-2007 à 10:02:16    

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

Reply

Marsh Posté le 03-05-2007 à 13:19:36    


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

Reply

Marsh Posté le 04-05-2007 à 19:45:43    


 
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 ?  

Reply

Marsh Posté le 04-05-2007 à 22:11:25    

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

Reply

Marsh Posté le 04-05-2007 à 22:47:58    


Bonne idée merci:)

Reply

Marsh Posté le 05-05-2007 à 04:02:26    

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

Reply

Marsh Posté le 05-05-2007 à 09:57:28    


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 ?

Reply

Marsh Posté le 05-05-2007 à 13:37:53    

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...

Reply

Marsh Posté le 05-05-2007 à 14:47:52    


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

Reply

Marsh Posté le 05-05-2007 à 19:06:26    


 
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:  

Reply

Marsh Posté le 06-05-2007 à 01:04:21    

Essaye le extern "C"...

Reply

Marsh Posté le 06-05-2007 à 09:53:19    


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++.
 

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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