quelqu'un parmi vous a déja eu le probleme suivant ??
en fait j'ai crée un DLL en PureBasic et je veux le charger depuis une petite application C++ un projet de test avant de travailler sur le vrai projet
bon le chargement du DLL marche très bien et tout marche nikel à part que il y'a une fonction dans le DLL que j'ai crée en PureBasic qui prend en argument un string "msg.s" aprés j'affiche le string pour tester mais ça marche pas il y'a un probleme dans le string.alors je me suis dit qu'il y'a un probleme de type de string entre le C++ et le pure basic
voila le code source du DLL:>
----------------------------------
Code : Tout sélectionner
#TESTDLL = 0
CompilerIf #TESTDLL = 0
;-----------------------------------------------------------------------------------------------------------
;Constructeur si il a été charger Dans le Process Distant
ProcedureDLL AttachProcess(Instance)
;MessageRequester("Reponse PB", Message$, #MB_ICONINFORMATION)
EndProcedure
ProcedureDLL DetachProcess(Instance)
;MessageRequester("Reponse PB", Message$, #MB_ICONINFORMATION)
EndProcedure
;----------------------------------------------------------------
;Constructeur si il a été charger Dans le thread du process Distant
ProcedureDLL AttachThread(Instance)
;MessageRequester("Reponse PB", Message$, #MB_ICONINFORMATION)
EndProcedure
ProcedureDLL DetachThread(Instance)
;MessageRequester("Reponse PB", Message$, #MB_ICONINFORMATION)
EndProcedure
;--------------------------------------------------------------------------------------------------------
ProcedureDLL display_string(msg.s)
MessageRequester("DLL de Test !",msg, #MB_ICONINFORMATION)
EndProcedure
ProcedureDLL msgbox_pb()
MessageRequester("Fonction Pure Basic !", "Fonction De Test Faite En PureBasic", #MB_ICONINFORMATION)
EndProcedure
CompilerElse
CompilerEndIf
et voila le code Visual C++ qui charge le DLL
-------------------------------------------
#pragma comment(lib, "c:\\Test_PB.lib")
#include <iostream>
#include <windows.h>
#include <conio.h>
using namespace std;
typedef int (*f1)();
typedef char* (*f2)(string);
HINSTANCE hh;
void main(){
f1 msbox;
f2 show;
hh = LoadLibrary("c:\\Test_PB.dll");
//hinstDLL = LoadLibrary("C:\\Program Files\\Microsoft Visual Studio\\MyProjects\\mmm\\Debug\\mmm.dll");
if(hh != 0){
msbox = (f1) GetProcAddress(hh, "msgbox_pb");
show = (f2) GetProcAddress(hh, "display_string");
}
int x = msbox();
string rep("Chaine de Teste");
//strcpy(rep,show("Chaine En Parametre Pour Le DLL PureBasic"));
cout<<show(rep);
FreeLibrary(hh);
getch();
}