Bonjour � tous,

une question qui est entre du C++ et du VBA (j'ai choisi de la mettre ici) :
Je veux compiler une dll pour l'utiliser ensuite en VBA sous Excel. C'est la premi�re fois que je fais �a et je veux juste assimiler le principe avec un exemple tr�s simple.

J'ai cr�� un projet sous code block. Voici mon .h :

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
19
20
21
22
23
24
25
26
27
28
#ifndef __MAIN_H__
#define __MAIN_H__
 
#include <windows.h>
 
/*  To use this exported function of dll, include this header
 *  in your project.
 */
 
#ifdef BUILD_DLL
    #define DLL_EXPORT __declspec(dllexport)
#else
    #define DLL_EXPORT __declspec(dllimport)
#endif
 
 
#ifdef __cplusplus
extern "C"
{
#endif
 
int DLL_EXPORT carre(int chiffre);
 
#ifdef __cplusplus
}
#endif
 
#endif // __MAIN_H__
et voici mon .cpp :

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
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "main.h"
 
// a sample exported function
int DLL_EXPORT carre(int chiffre)
{
    return chiffre*chiffre;
}
 
extern "C" DLL_EXPORT BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH:
            // attach to process
            // return FALSE to fail DLL load
            break;
 
        case DLL_PROCESS_DETACH:
            // detach from process
            break;
 
        case DLL_THREAD_ATTACH:
            // attach to thread
            break;
 
        case DLL_THREAD_DETACH:
            // detach from thread
            break;
    }
    return TRUE; // succesful
}
Je compile ma dll, �a a l'air de fonctionner. Je vais sous Excel et je d�clare dans un module :

Option Explicit

Private Declare Function carre Lib "C:\Users\Nicolas\Desktop\DLL C++\TestDLL\bin\Release\TestDLL.dll" (ByVal chiffre As Integer) As Integer

Sub toto()
Debug.Print carre(10)
End Sub

J'obtiens l'erreur 49 :

Convention d'appel de dll incorrecte

J'ai tent� de changer le type des variables en double dans les deux (C et VBA), mais sans succ�s. Est ce que quelqu'un peut me dire d'o� vient le probl�me ?

Je vous remercie