Probleme compatibilité version delphi 2007 2010 methodes " .DLL" fichier NET

snoopydelphi Messages postés 7 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 12 mars 2010 - 18 févr. 2010 à 15:59
geminiversi Messages postés 1 Date d'inscription mardi 6 mai 2003 Statut Membre Dernière intervention 13 juin 2010 - 13 juin 2010 à 11:37
Bonjour,

Je suis actuellement sur un projet,

Nous avons commencé sous delphi 2007 .
Celui-ci ce compose de methodes.DLL , "netCDF.dll ": ce sont des routines de lecture fichier NETCDF .
exemple :" function nc_open(path : pchar; mode : integer; var ncidp : integer) : integer; cdecl; external 'netcdf.DLL'; "
Il les trouvent, les charges et les interprètent correctement.

Nous somme passé depuis peu sous delphi 2010 .
Je compile notre programme et nous avons rien touchée .
Je charge les mêmes méthodes.DLL il les trouvent mais n'interprète pas les données . lorsque je charge une fichier NETCDF, il l'ouvre mais les paramètre restent identiques aux paramètres de base.


J'ai vérifier en enlevant la DLL ( il y a un message d'erreur quand elle n'y est pas ).
Idem, en modifiant le nom des méthodes on peux lire un message d'erreur.


Je me demande alors es que c'est du a un problème de compatibilité entre Delphi 2007 et delphi 2010 ?
La taille de mon .exe est plus grande sur delphi 2010 que 2007 est-ce normal ?
Avez vous une solution a ce problème ?

6 réponses

Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
18 févr. 2010 à 20:39
il me semble que D2010 utilise des chaines unicode, et je pense que c'est la source de ton probleme (je suppose car je n'ai ni 2007, ni 2010).
je pense que tu as
type
  PChar = PWideChar; //version 2010
  PChar = PAnsiChar; //version 2007


Donc, si tu remplace ta declaration par
function nc_open(path : PAnsiChar; mode : integer; var ncidp : integer) : integer; cdecl; external 'netcdf.DLL';

ca devrait marcher
0
ThierryLaborde Messages postés 91 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 23 janvier 2017 1
19 févr. 2010 à 10:04
Bonjour,

Je confirme ce que dit Guillemouze, cela vient du fait que D2007 n'est pas unicode alors que D2010 oui.


Thierry Laborde
CodeGear Evangelist
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
19 févr. 2010 à 10:17
au passage Thierry, y-a-t'il un moyen, dans D2010, de choisir de compiler en Ansi et pas en Wide, sans remplacer a la mano dans les fichiers "string" par "AnsiString", etc..., et sans repasser dans chaque dpr pour mettre une directive de compil' ou autre ?
Dans ma boite, on aimerai bien passer a D2010, mais le lourd passé applicatif qu'on a ne supporterai pas le passage en unicode
0
ThierryLaborde Messages postés 91 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 23 janvier 2017 1
19 févr. 2010 à 10:46
Non désolé, malheureusement pas de possibilité. Le type String est forcément Unicode, on a pas le choix.


Thierry Laborde
CodeGear Evangelist
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
20 févr. 2010 à 00:27
par contre pourquoi utiliser la convention d'appel CDECL plutot que STDCALL puisque les librairies sont créées en Delphi ?

petit conseil pour le wrapper :

unit ...;

interface

{$DEFINE CVCDECL}

type
  LpStr = {$IFDEF UNICODE} PAnsiChar {$ELSE} PChar {$ENDIF};

function nc_open(path: LpStr; mode: LongInt; var ncidp: LongInt): LongInt; {$IFDEF CVCDECL}cdecl{$ELSE}stdcall{$ENDIF};

impementation

const
  METHODLIB = 'methodes.dll';
  NETCDFLIB = 'netcdf.dll';

function nc_open; external NETCDFLIB name 'nc_open';

end.
0
geminiversi Messages postés 1 Date d'inscription mardi 6 mai 2003 Statut Membre Dernière intervention 13 juin 2010
13 juin 2010 à 11:37
Bonjour,

Cette discussion m'a bien aidé car je rencontrais exactement le même problème (librairie netCDF.dll avec Delphi 2010).

Au cas où d'autres personnes rencontreraient un problème similaire, je me permets de confirmer que les réponses données fonctionnent parfaitement (remplacement des types dans les déclarations).

En complément, je me suis ajouté une méthode de conversion d'un "string" en "PAnsiChar" :

function TNetCDF.StrToPAnsiChar(sTexte: string) : PAnsiChar;
begin
  result := PAnsiChar(AnsiString(sTexte));
end;


Merci pour vos explications.
0
Rejoignez-nous