Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Delphi > Delphi .NET
Delphi .NET Forum d'entraide sur l'EDI Delphi pour .NET et Borland Developer Studio
Avant de poster -> F.A.Q. Delphi .NET, F.A.Q. Delphi ASP.NET
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/10/2010, 10h25   #1
vincentj
Invité de passage
 
Inscription : août 2002
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 50
Points : 0
Points : 0
Par défaut DLL Win32 depuis Dot.Net

Bonjour,

Je doit appeler une DLL Win32 depuis un programme Delphi Dot.net. J'utilise la méthode DllImport et ça marche très bien avec des types numériques, le souci apparaît quand je veux utiliser des chaines. Dans ma Dll Win32 j'ai:

Code :
1
2
3
4
function PassageChaine(Chn: PChar):Boolean;stdcall;
begin
 ShowMessage(StrPas(Chn));
end;
Dans mon appli.net j'ai :
Code :
1
2
 [DllImport('Calculer.dll', CharSet = CharSet.Auto, EntryPoint = 'PassageChaine')]
	Function PassageChaine(Chn:String):Boolean; external;
et au niveau de l'appel j'ai:
Code :
 PassageChaine('abcde');
Lorsque j'exécute l'appli je vois bien le showmessage mais uniquement avec le premier caractère : a

Le problème vient d'ou de la DLL ou du programme appelant ?

Merci d'avance
vincentj est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2010, 11h06   #2
ShaiLeTroll
Expert Confirmé Sénior
 
Avatar de ShaiLeTroll
 
Homme
Développeur C++\Delphi
Inscription : juillet 2006
Messages : 9 187
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur C++\Delphi
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juillet 2006
Messages : 9 187
Points : 13 233
Points : 13 233
Ce ne serait pas du WideChar ?
Et tu es en Delphi 1 à Delphi 2007 (du moins je l'espère pour ma théorie )

Code :
1
2
3
4
function PassageChaine(Chn: PWideChar):Boolean;stdcall;
begin
ShowMessage(WideCharToString(Chn));
end;
'abcde' c'est en fait en UniCode 'a0b0c0d0e000'
Comme ShowMessage, est ANSI, il voit a puis 0 qu'il confond avec un zéro terminal !
__________________
Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
Attention Troll Méchant !
"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
L'ignorance n'excuse pas la médiocrité !

L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Halte à la ségrégation des Cinémas, VO sur Paris, VF en Banlieue, Abonnement résilié !
ShaiLeTroll est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/10/2010, 11h26   #3
vincentj
Invité de passage
 
Inscription : août 2002
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 50
Points : 0
Points : 0
Je suis en Delphi 2007, donc c'est du WideChar, et ta théorie est bonne.

Ca marche,

Merci
vincentj est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 21h30.


 
 
 
 
Partenaires

Hébergement Web