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 :
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 :
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
);
} |
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
Partager