Bonjour à tous,

SVP Veuillez m'aider à résoudre le problème suivant :

En faite j'ai créer une DLL pour pouvoir l'utiliser en PowerBuilder, la DLL fonctionne parfaitement, le lien entre powerBuilder et cette DLL se fait correctement (Passage des paramètres,...) , jusqu'a ce point tout est OK.
Le seul problème qui se présente est dans le nom des fonctions présentes dans cette DLL; En effet pour pouvoir exécuter La fonction Test(...) à partir de PowerBuilder il faut déclarer la fonction externe suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
FUNCTION int Test(string utilisateur, string atome, long operation, long evenement, long reglement,ref string null_flags, ref string string_value, ref string date_value, ref long long_value, ref int boolean_value, ref double double_value) LIBRARY "MaDLL.dll" ALIAS FOR "_Z15TestPKcS0_lllPcS1_S1_RlRsRd@44"
Le problème comme vous remarquez est dans l'alias (obtenu à partir du fichier libMaDLL.dll.def, généré automatiquement,par le compilateur, en même temps que la MaDLL.dll)
est ce qu'il y a possibilité pour faire changer cet alias par "Test" uniquement au lieu de "_Z15TestPKcS0_lllPcS1_S1_RlRsRd@44".

mon code est le suivant :

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
 
//main.h
#include <windows.h>
#define DLL_EXPORT __declspec(dllexport) __stdcall
extern "C"
{
 
    int DLL_EXPORT Test(
                                    const   char     FAR  *   utilisateur,
                                    const   char     FAR  *   atome,
                                    const   PBLONG              operation,
                                    const   PBLONG              evenement,
                                    const   PBLONG              reglement,
                                    char    FAR   *   null_flags,
                                    char    FAR   *   string_value,
                                    char    FAR   *   date_value,
                                    PBLONG         & long_value,
                                    PBBOOL         & boolean_value,
                                    PBDOUBLE       & double_value
                                  );
}

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
32
33
34
35
36
37
38
 
//main.cpp
#include "main.h"
// a sample exported function
int DLL_EXPORT Test(
                                const   char     FAR  *   utilisateur,
                                const   char     FAR  *   atome,
                                const   PBLONG              operation,
                                const   PBLONG              evenement,
                                const   PBLONG              reglement,
                                char    FAR   *   null_flags,
                                char    FAR   *   string_value,
                                char    FAR   *   date_value,
                                PBLONG         & long_value,
                                PBBOOL         & boolean_value,
                                PBDOUBLE       & double_value
                              )
{
   int retour=0;
   // Mon traitement 
   return retour;
}
 
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH:
        break;
        case DLL_PROCESS_DETACH:
        break;
        case DLL_THREAD_ATTACH:
        break;
        case DLL_THREAD_DETACH:
        break;
    }
    return TRUE; // succesful
}
Merci d'avance