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

Messages postés
7
Date d'inscription
mercredi 2 décembre 2009
Statut
Membre
Dernière intervention
12 mars 2010
- - Dernière réponse : 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 ?
Afficher la suite 

6 réponses

Messages postés
1015
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
5
0
Merci
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
Commenter la réponse de Guillemouze
Messages postés
92
Date d'inscription
mercredi 12 septembre 2007
Statut
Membre
Dernière intervention
23 janvier 2017
1
0
Merci
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
Commenter la réponse de ThierryLaborde
Messages postés
1015
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
5
0
Merci
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
Commenter la réponse de Guillemouze
Messages postés
92
Date d'inscription
mercredi 12 septembre 2007
Statut
Membre
Dernière intervention
23 janvier 2017
1
0
Merci
Non désolé, malheureusement pas de possibilité. Le type String est forcément Unicode, on a pas le choix.


Thierry Laborde
CodeGear Evangelist
Commenter la réponse de ThierryLaborde
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26
0
Merci
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.
Commenter la réponse de f0xi
Messages postés
1
Date d'inscription
mardi 6 mai 2003
Statut
Membre
Dernière intervention
13 juin 2010
0
Merci
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.
Commenter la réponse de geminiversi