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++/CLI Discussion :

delphi 7 -> .NET


Sujet :

C++/CLI

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 486
    Par défaut delphi 7 -> .NET
    Bonjour,

    Actuellement en charge d'intégrer les fonctions d'une dll crée sous Delphi dans le monde .NET, je sollicite votre avis pour avoir la stratégie la plus efficace.

    L'existant :
    - Dll exposant une interface (delphi) non taggée stdcall (utilisant des types complexes et classes en param)
    - Accès au code source de tous les éléments
    - Pas le droit de toucher l'existant (seulement des sur-couches)

    Faut-il opter pour :
    -une intégration directe dans une classe C# avec un type d'appel fastcall ?
    -une intégration avec un wrapper C++/CLI par la suite utilisé en C# ?
    -wrapper natif exposant du stdcall puis wrapper C# ?
    -wrapper natif orienté COM puis intégration .NET ?

    Je pense me souvenir que le marshalling ne va pas trop apprécier les types delphi genre WideString... des recommandations ?

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 486
    Par défaut Mapping WideString
    Re,

    Je continue à fouiller mais je suis tombé sur un os.

    Côté Delphi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TestDOCManager4(Msg : WideString ; out Msg2 : WideString);stdcall;
     
    procedure TestDOCManager4(Msg : WideString ; out Msg2 : WideString);
    begin
      ShowMessage(Msg);
      Msg2 := Msg + ' coucou de TestDOCManager4';
    end;
    Côté .NET :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DllImport("Project1.dll",CallingConvention=CallingConvention.StdCall,CharSet=CharSet.Auto,SetLastError=true]
    public static extern void TestDOCManager4(string msg, out StringBuilder msg2);
    En jouant sur la CallingConvention, lorsque l'on est sur Ansi, rien ne passe. Lorsque l'on est sur Unicode, seule la moitié des caractères passe. WideString est composé de plusieurs WideChar qui codent un caractère sur 2 octets.

    Des suggestions ?

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 486
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 486
    Par défaut
    Changement de stratégie. Suite et fin de l'épisode portage.

    Je me suis créé un petit objet COM comme un grand sous delphi, il sert de wrapper à la lib que je veux porter en .net.

    Pwned le WideString :

    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
    FGetManager est mon pointeur de procédure qui permet de charger mon FManager...
     
    function TComManager.GetType(DOCID: PWideChar; out Type_: PWideChar): WordBool;
    var
      retour : WideString;
    begin
        Result := False;
        try
          if Assigned( FGetManager ) then
            Result := FManager.GetType(DOCID, retour);
          if Result and (Length(retour)<>0) then
          begin
            Type_ := PWideChar(LocalAlloc(LPTR, (Length(retour)+1)*SizeOf(WideChar)));
            CopyMemory(Type_, PWideChar(retour), (Length(retour)+1)*SizeOf(WideChar));
          end
          else
          begin
            Type_ := nil;
          end;
        except
          on e:Exception do ShowMessage('Erreur GetType : '+e.Message);
        end;
     
    end;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Choix d'un langage : passer de VB6 à quoi ? Windev, Delphi ou VB.net ?
    Par New dans le forum Langages de programmation
    Réponses: 8
    Dernier message: 05/10/2006, 21h45
  2. [Debuter] Delphi avec Visual .NET 2005
    Par kacedda dans le forum Delphi
    Réponses: 4
    Dernier message: 24/05/2006, 13h37
  3. Passage de Delphi WIN32 au .NET
    Par aityahia dans le forum EDI
    Réponses: 9
    Dernier message: 04/04/2006, 02h54
  4. Delphi 2006 - CE.net - Win32
    Par p-f.philippe dans le forum Delphi .NET
    Réponses: 6
    Dernier message: 10/01/2006, 18h57
  5. [TPageColtrol][Delphi 2005 VCL.NET] couleurs onglets
    Par Harry dans le forum Composants VCL
    Réponses: 6
    Dernier message: 27/09/2005, 18h41

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