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

Delphi .NET Discussion :

Peut on / comment déclarer un pointeur en .NET? [FAQ]


Sujet :

Delphi .NET

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Par défaut Peut on / comment déclarer un pointeur en .NET?
    Bonjour;
    je suis dans un projet VCL .net. J'ai du dan mon source charger une vieille DLL que j'ai écrite en WIn32 (j'aimerai la réutiliser en .NET sans retoucher a cette DLL). Le problème c'est que dans cette DLL j'ai une fonction qui me renvoie une string: voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       fonction maChaine(chaine : pchar):integer;
       begin
           StrPCopy(chaine, 'ceci est pas phrase');
       end;
    et moi dans mon code (à l'époque un code en c) je pouvais récupérer ma string.
    Le problème c'est que la en Delphi.net je n'est plus les pointeur (enfin je crois) alors comment puis je faire pour récupérer cette string en .NET?

    Merci;

  2. #2
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Juillet 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 128
    Par défaut
    Est-ce cela ta fonction?sinon donne moi la structure exacte de ta fonction.

    Pour faire appel à ta fonction dans ta dll tu va devoir l'appeler en utilisant PInvoke.

    TU as plusieurs possibilité ensuite, il te faudra utiliser la classe marshal et notamment la fonction stringtohglobalansi pour obtenir un pointeur de type IntPtr.

    Donne moi la déclaration exacte de ta fonction d'origine et je te donnerais la procédure a suivre

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 141
    Par défaut
    oui c'est bien ma fonction sauf que au lieu de me renvoyer cette phrase elle me renvoit un chemin de sauvegarde (je dois le récupérer pour ouvrir le fichier).

    merci pour ton coup de main

  4. #4
    Membre confirmé
    Profil pro
    Enseignant
    Inscrit en
    Juillet 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juillet 2004
    Messages : 128
    Par défaut
    Dans ce cas tu déclare ta fonction comme-ci dans la partie interface :

    function machaine(chaine:string):Integer;

    et dans la partie implementation:

    [SuppressUnmanagedCodeSecurity, DllImport(name_dll, CharSet = CharSet.Auto, SetLastError = True, EntryPoint = 'machaine)]
    function machaine(chaine:string):Integer; external;

    Je penses que ca devrait marcher, remarque j'ai un doute car j'imagine que ta chaine va être modifiée. Dans ce cas au lieu d'utiliser string essaie stringBuilder si ca marche pas.

Discussions similaires

  1. Comment on peut appeler une requête access sous asp.net ?
    Par Khalid.bounouader dans le forum ASP.NET
    Réponses: 4
    Dernier message: 29/08/2008, 13h21
  2. Réponses: 0
    Dernier message: 22/11/2007, 10h32
  3. Comment déclarer un pointeur dans une Table
    Par walid_kerkoub dans le forum Delphi
    Réponses: 4
    Dernier message: 09/07/2007, 13h49
  4. Réponses: 2
    Dernier message: 01/02/2006, 15h02

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