IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

passage de paramètre dans l'appel d'une fonction venant d'une dll (C++ & Delphi)


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 37
    Points
    37
    Par défaut passage de paramètre dans l'appel d'une fonction venant d'une dll (C++ & Delphi)
    Bonjour,

    Le code suivant (écrit en C++) charge une fonction d'une dll (dll écrite en delphi), et, est censé m'afficher du texte passé en paramètre.
    Celà ne fonctionne pas, le texte retourné semble toujours "null" ...
    (Le chargement de la dll etc est ok)

    Je ne comprend pas d'où vient l'erreur

    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
    	private: System::Void bt_sbHelloParam_Click(System::Object^  sender, System::EventArgs^  e) {
     
    				typedef  wchar_t* (*fct_sbHelloParam)(LPSTR txt);
    				fct_sbHelloParam fsbHelloParam;
     
    				fsbHelloParam = (fct_sbHelloParam)GetProcAddress(hInstLibrary, "_sbHelloParam");
    				if (fsbHelloParam){
    					LPSTR txt = "test";
    					std::wstring res = fsbHelloParam(txt);
    					MessageBox::Show(System::Convert::ToString(gcnew String(res.c_str())),"msg",MessageBoxButtons::OK,MessageBoxIcon::Question);
    				}else{
    					MessageBox::Show("GetProcAddress for _sbHelloParam failed !","msg",MessageBoxButtons::OK,MessageBoxIcon::Question);
    				}
     
    		 }

    fonction en elle même (écrite en delphi)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function _sbHelloParam(txt:PChar):Pchar; stdcall;
      var
        res : Pchar;
     begin
      StrPCopy(res,sbHelloParam(StrPas(txt))) ;
      Result := res;
     end ;

    PS: j'ai fais une fonction HelloWorld qui elle affiche un texte prédéfini dans la DLL delphi, et ça, ça marche.


    Mais mon HelloParam est censé afficher un texte passé en paramètre, et c'est là que se pose mon problème (le passage de valeur en paramètres)

  2. #2
    screetch
    Invité(e)
    Par défaut
    pchar n'est pas comme wchar_t *
    et StrPCopy m'a l'air suspect

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par screetch Voir le message
    pchar n'est pas comme wchar_t *
    et StrPCopy m'a l'air suspect
    pourtant la même fonction mais sans passage de paramètre, marche sans probleme ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function _sbHelloWorld():Pchar; stdcall;
      var
        res : Pchar;
     begin
      StrPCopy(res,sbHelloworld()) ;
      Result := res;
     end ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    	private: System::Void bt_sbHelloWorld_Click(System::Object^  sender, System::EventArgs^  e) {
     
    				typedef  wchar_t* (*fct_sbHelloWorld)();
    				fct_sbHelloWorld fsbHelloWorld;
     
    				fsbHelloWorld = (fct_sbHelloWorld)GetProcAddress(hInstLibrary, "_sbHelloWorld");
    				if (fsbHelloWorld){	
    					std::wstring res = fsbHelloWorld();
    					MessageBox::Show(System::Convert::ToString(gcnew String(res.c_str())),"msg",MessageBoxButtons::OK,MessageBoxIcon::Question);
    				}else{
    					MessageBox::Show("GetProcAddress for _sbHelloWorld failed !","msg",MessageBoxButtons::OK,MessageBoxIcon::Question);
    				}
    		 }
    je capte pas ... suis sur c une bétise, mais ????

  4. #4
    screetch
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef  wchar_t* PASCAL (*fct_sbHelloParam)(LPSTR txt);
    ?

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par screetch Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef  wchar_t* PASCAL (*fct_sbHelloParam)(LPSTR txt);
    ?
    L'ajout d'un PASCAL ou d'un _STDCALL provoque un plantage à l'exécution.


    je viens d'essayer ceci, qui me parait plus cohérent au niveau des déclaration de variable ... mais le résultat est le même mon msgbox est vide.

    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
    	private: System::Void bt_sbHelloParam_Click(System::Object^  sender, System::EventArgs^  e) {
     
    				typedef  wchar_t* (*fct_sbHelloParam)(std::wstring txt);
    				fct_sbHelloParam fsbHelloParam;
     
    				fsbHelloParam = (fct_sbHelloParam)GetProcAddress(hInstLibrary, "_sbHelloParam");
    				if (fsbHelloParam){
    					std::string txt = "test";
    					std::wstring wtxt = wtxt.assign(txt.begin(),txt.end());
    					std::wstring res = fsbHelloParam(wtxt);
    					MessageBox::Show(System::Convert::ToString(gcnew String(res.c_str())),"msg",MessageBoxButtons::OK,MessageBoxIcon::Question);
    				}else{
    					MessageBox::Show("GetProcAddress for _sbHelloParam failed !","msg",MessageBoxButtons::OK,MessageBoxIcon::Question);
    				}
     
    		 }
    si je fais un msgbox d'un texte fixe genre "zzz", il s'affiche bien, donc c'est le problème vient de quelque part au niveau de l'appel de ma fonction, ou du résultat qu'elle envoie.

  6. #6
    screetch
    Invité(e)
    Par défaut
    ah j'avais manque le stdcall sur ta fonction en pascal.

    je suis sur a 90% que la signature devrait etre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef  char* STDCALL (*fct_sbHelloParam)(char* txt);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function _sbHelloParam(txt:PChar):Pchar; stdcall;
      var
        res : Pchar;
     begin
      StrPCopy(res,sbHelloParam(StrPas(txt))) ;
      Result := res;
     end ;
    et si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    myString  := 'Hello World';
    Result := Addr(myString[1]);
    ca fait longtemps que j'ai pas fait de pascal, alors je suis pas sur que ca peut marcher...

    ou sinon est-ce que marche?

  7. #7
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    730
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 730
    Points : 1 648
    Points
    1 648
    Par défaut
    Il manque un StrAlloc dans _sbHelloParam. Et ça pose un problème de propriétaire de la chaîne allouée.

    Apparemment pour wchar_t* il faudrait utiliser PWideChar ?

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 127
    Points : 33 038
    Points
    33 038
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par vin100H Voir le message
    si je fais un msgbox d'un texte fixe genre "zzz", il s'affiche bien, donc c'est le problème vient de quelque part au niveau de l'appel de ma fonction, ou du résultat qu'elle envoie.
    Ca me fait beaucoup penser à un problème de responsabilité mémoire.
    En gros la chaîne pascal que tu espères récupérer en C++ est supprimée en sortie de la fonction Pascal. Et n'arrive donc jamais dans le C++.
    Ne peux-tu pas améliorer la fonction pour prendre en paramètre out la chaîne à remplir ?

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 37
    Points
    37
    Par défaut
    Bon, un "petit peut" d'avancement.

    J'ai fais quelques modif, viré les msgbox qui semblaient déconner, je remes donc mon dernier code ci-dessous

    C++
    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
    	private: System::Void bt_sbHelloParam_Click(System::Object^  sender, System::EventArgs^  e) {
     
    				typedef  wchar_t* (*fct_sbHelloParam)(std::wstring wtxt);
    				fct_sbHelloParam fsbHelloParam;
     
    				fsbHelloParam = (fct_sbHelloParam)GetProcAddress(hInstLibrary, "_sbHelloParam");
    				if (fsbHelloParam){
     
    					std::string txt = "test";
    					std::wstring wtxt;
    					wtxt.assign(txt.begin(), txt.end());
     
    					std::wstring res = fsbHelloParam(wtxt);
    					this->tbLog->Text += System::Convert::ToString(gcnew String(res.c_str()));
    				}else{
    					this->tbLog->Text += "GetProcAddress for _sbHelloParam failed !" + "\r\n";
    				}
     
    		 }
    Delphi (DLL)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function _sbHelloParam(txt:PChar):Pchar; stdcall;
      var
        res : Pchar;
        myString : string;
     begin
      myString := txt;
      StrPCopy(res,myString);
      Result := res;
     end ;
    Le résultat est le suivant "ᢰӫ᮰ë똏쇀ˠ獳牯4" .... interdit de rire.

    Non, plus sérieusement, en mode debug, je constate que avant l'exécution de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::wstring res = fsbHelloParam(wtxt);
    la valeur de wtxt correspond bien à "test", mais une fois passée par ma fonction delphi, j'ai en retour ceci "ᢰӫ᮰ë똏쇀ˠ獳牯4" (dans res)

    J'ai testé différentes combinaise de StrPas, StrPcopy, etc dans delphi, mais ????

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 37
    Points
    37
    Par défaut
    petit up

    j'ai ajouté une écriture dans un fichier ini à ma dll, de manière à voir si ce qu'elle reçoit est correcte, et déjà là il y à un prob.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      IniFile.WriteString('zzz', '1', txt);
      IniFile.WriteString('zzz', '2', StrPas(txt));
    celà me donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [zzz]
    1=????????????????????????????????~?????????%????????????U???????????
    2=????????????????????????????????~?????????%????????????U???????????
    Donc il doit y avoir un soucis soit dans la manière dont je fais l'envois ?

  11. #11
    screetch
    Invité(e)
    Par défaut
    tu ne peux pas envoyer des objets C++ comme wstring, tu peux juste passer des PChar. et PChar est different de PWideChar.

    string.c_str() -> PChar
    wstring.c_str()->PWideChar

  12. #12
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    730
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 730
    Points : 1 648
    Points
    1 648
    Par défaut
    Les types String et Char des versions récentes de Delphi sont wide :
    http://www.micro-isv.asia/2008/08/ge...9-and-unicode/
    Just like string is now UnicodeString, Char is now an alias to WideChar, and PChar an alias to PWideChar.

  13. #13
    screetch
    Invité(e)
    Par défaut
    aHAH. 8 ans que j'ai pas fait de Delphi, je suis a la ramasse
    neanmoins, on ne peut toujours pas envoyer wstring a delphi; les objets C++ doivent etre cinvertis en objet simples comme int ou char* avant de pouvoir etre lus par delphi, et vice versa: on ne peut pas envoyer un objet delphi au C++

  14. #14
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    730
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 730
    Points : 1 648
    Points
    1 648
    Par défaut
    Bien entendu.

    Mais je répète quelque chose qui semble avoir été ignoré : faire un StrPCopy sans StrAlloc, c'est comme faire ça en C :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *bob;
    strcpy(bob, "my name is Bob");
    Il y a comme un souci, non ?

    Donc on récapitule :
    - Il faut utiliser wchar_t/wstring côté C++ pour avoir le même type de caractères (si Delphi est suffisamment récent)
    - Si en Delphi on veut créer un PChar, le mieux est d'utiliser le type String et utiliser l'équivalent de notre c_str : PChar() (ça évitera de faire des StrAlloc)
    - Si une fonction Delphi doit retourner une chaîne, il faut que cette chaîne soit statique (et thread-local éventuellement), ou bien incluse dans un objet dont l'importateur est propriétaire*
    - On peut aussi écrire une fonction qui prend en paramètre un pointeur + une taille maxi, mais c'est plus lourd
    - Il existe peut-être des types chaînes communs aux 2 langages, par exemple BSTR (encapsulé par _bstr_t en C++ et WideString en Delphi

    (*) Quand je développe des DLL pour un autre langage il arrive souvent que j'exporte des fonctions de création/libération d'objets, de manière à transférer la propriété de ces objets vers le langage importateur. Celui-ci encapsule les objets dans des classes et c'est presque transparent (ça pose parfois pas mal de problèmes, cependant)

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 37
    Points
    37
    Par défaut
    Bon, après 1 petit jour à la maison, je m'y remet.

    PS: j'utilise PChar en delphi, car j'ai lu que le type string en delphi ne pouvait pas être transféré et qu'il fallait utiliser Pchar

    PS2 : Il s'agit de Delphi XE et de C++ (MsVisual Studio 2008)

  16. #16
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    730
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 730
    Points : 1 648
    Points
    1 648
    Par défaut
    Citation Envoyé par vin100H Voir le message
    PS: j'utilise PChar en delphi, car j'ai lu que le type string en delphi ne pouvait pas être transféré et qu'il fallait utiliser Pchar
    Ca change rien. Le type manipulé dans Delphi doit être une String, tu as PChar() pour en extraire un PChar (comme std::string::c_str en C++).

    Citation Envoyé par vin100H Voir le message
    PS2 : Il s'agit de Delphi XE et de C++ (MsVisual Studio 2008)
    D'après une recherche google, c'est bien une version récente avec des String UTF-16.

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 37
    Points
    37
    Par défaut
    Je pense que je vois ce qu'il se passe ... mais je n'arrive pas a le corriger.

    Selon l'aide de Delphi, ...
    PChar définit un pointeur sur un emplacement mémoire qui contient des valeurs WideChar (y compris le caractère #0).
    ce que je dois envoyer à ma fonction est donc un pointeur de type wchar_t*

    ce qui n'est pas le cas pour le moment, ... je lui envoie un wstring (et il s'attend a recevoir un pointeur)

    J'ai donc fait quelques modif qui donnent ceci.

    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
    	private: System::Void bt_sbHelloParam_Click(System::Object^  sender, System::EventArgs^  e) {
     
    				typedef  wchar_t* (*fct_sbHelloParam)(wchar_t* wtxt);
    				fct_sbHelloParam fsbHelloParam;
     
    				fsbHelloParam = (fct_sbHelloParam)GetProcAddress(hInstLibrary, "_sbHelloParam");
    				if (fsbHelloParam){
     
    					char* txt("test");
    					wchar_t* wtxt;
    					mbstowcs(wtxt, txt, 5);
    					wchar_t* res = fsbHelloParam(wtxt);
    					char* reschar;
    					wcstombs(reschar, res, 5);
    					std::string resstr=reschar;
     
    					this->tbLog->Text += System::Convert::ToString(gcnew String(resstr.c_str()))+ "\r\n";
    				}else{
    					this->tbLog->Text += "GetProcAddress for _sbHelloParam failed !" + "\r\n";
    				}
     
    		 }
    le problème est que mon mbstowcs ne semble pas marcher.
    quand je passe en mode debug, il m'indique bien une adresse à laquelle on trouve "test" pour mon char*
    avant mbstowcs, mon wtxt est "undefined"
    après mbstowcs, mon wtxt est toujours "undefined"

    ?

    un petit edit pour dire que cette partie là est ok
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    					wchar_t* wtxt = L"test";
    					wchar_t* res = fsbHelloParam(wtxt);
    en debug, je vois que c bien le pointeur qui pointe vers la valeur "test" qui est envoyé.

    il me reste donc je pense un problème dans delphi

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par Hibernatus34 Voir le message
    Ca change rien. Le type manipulé dans Delphi doit être une String, tu as PChar() pour en extraire un PChar (comme std::string::c_str en C++).


    D'après une recherche google, c'est bien une version récente avec des String UTF-16.
    Oui, le PChar en delphi est bien en 16 unicode.

    Apparement, pour extraire un pchar, il suffirait de faire un truc genre
    monstr := monpchar;


    Peut-être que j'ai une erreur des 2 côté enfait ... Delphi et C++

  19. #19
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    730
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 730
    Points : 1 648
    Points
    1 648
    Par défaut
    Citation Envoyé par vin100H Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::string txt = "test";
    std::wstring wtxt;
    wtxt.assign(txt.begin(), txt.end());
    Ca c'est mal.
    Voilà la manière correcte :
    http://www.cplusplus.com/reference/s...e/ctype/widen/

    Ou plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::wstring wtxt(L"test");
    Citation Envoyé par vin100H Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function _sbHelloParam(txt:PChar):Pchar; stdcall;
      var
        res : Pchar;
        myString : string;
     begin
      myString := txt;
      StrPCopy(res,myString);
      Result := res;
     end ;
    Ca c'est très mal !
    1. res n'a pas été initialisé (c'est un pointeur qui pointe où ?), je comprends pas pourquoi ça n'a pas planté.
    2. Qui va libérer la mémoire pointée par res ? Le code de la DLL n'en garde pas trace, après l'appel à cette fonction c'est perdu.

    Pour commencer, déclare une String globale (ou membre d'un objet qui existera avant et après tous les appels à cette fonction), et dans cette String tu mets la chaîne que tu veux retourner (maString := "tataouine"), et tu retournes : Result := PChar(maString).

    Après, il faudrait savoir à quoi va servir ta DLL pour trouver une solution plus "intelligente".

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 37
    Points
    37
    Par défaut
    Groarrr je deviens fou.

    Bon, je récapapète depuis le bédu, car je commence à m'emmeler.

    Voici la dernière version de mon code C++ qui, sauf erreur, me parrait cette fois-ci plus "cohérent
    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
    	private: System::Void bt_sbHelloParam_Click(System::Object^  sender, System::EventArgs^  e) {
     
    				typedef  wchar_t* (*fct_sbHelloParam)(wchar_t* wtxt);
    				fct_sbHelloParam fsbHelloParam;
     
    				fsbHelloParam = (fct_sbHelloParam)GetProcAddress(hInstLibrary, "_sbHelloParam");
    				if (fsbHelloParam){
     
    					wchar_t* wtxt = L"test";
    					wchar_t* res = fsbHelloParam(wtxt);
    					this->tbLog->Text += System::Convert::ToString(gcnew String(res))+ "\r\n";
    				}else{
    					this->tbLog->Text += "GetProcAddress for _sbHelloParam failed !" + "\r\n";
    				}
     
    		 }
    et voici le code de ma DLL (où j'envoie dans un fichier le paramètre, pour essayer de "tracer" à quel moment ça foire)

    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
    function _sbHelloParam(txt:Pchar):Pchar; stdcall;
      var
        res : Pchar;
        myString : string;
        IniFile : TIniFile;
     begin
     
      myString := pChar(txt);
     
      IniFile := TIniFile.Create('C:\Windows\zzz_ctest.ini');
      IniFile.WriteString('zzz', '1', myString);
      IniFile.Free;
     
      Result := txt;
     end ;

    celà me donne, comme résultat à l'écran dans mon programme C++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    9ኌ巢9䋶ᘴb
    et dans mon fichier ini (Delphi)
    Quant-à ta question à quoi servira la dll, en réalité, il s'agit d'une DLL déjà fonctionnelle sous Delphi, appelée par Delphi, mais, qui devra être appelée également par du C++
    Donc, on "essaie" d'ajouter des fonctions appelable à partir de C++ qui, elle-même, utiliseront les fonction "standard" (pour ne pas modifié le déjà fonctionnel).

    Mais le but dans un 1er temps est de pouvoir faire fonctionner un HelloParam.
    Un HelloWorld basique (à la méthode fonction compatible C++ appelant fonction "standard" Delphi, c'est OK)

    là où le bas blesse, c'est quand il faut passer des paramètres.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [JavaScript] [FAQ] Appeler dynamiquement une fonction et passer une fonction en argument
    Par SpaceFrog dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/05/2008, 14h48
  2. Réponses: 2
    Dernier message: 26/04/2008, 17h31
  3. Réponses: 4
    Dernier message: 30/11/2007, 14h46
  4. Appel d'une fonction A depuis une fonction B.
    Par LeFlou dans le forum C++
    Réponses: 9
    Dernier message: 22/05/2007, 17h36
  5. Passer une fonction comme argument à une fonction
    Par Cocotier974 dans le forum Général Python
    Réponses: 4
    Dernier message: 29/06/2004, 13h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo