est-il possible de mobilier des noms comme ceux-ci à Delphi? Si oui, où puis-je obtenir plus d'informations?
Exemple d'un message d'erreur où il ne peut pas trouver une certaine entrée dans le DBRTL100.bpl
Je veux savoir quelle fonction exacte ne peut pas trouver (unité, classe, nom, paramètres, etc.). P> Je sais que c'est la méthode gettablenamefromsqlex dans l'unité DBCONMON (i avoir Delphi avec les sources RTL / VCL), mais parfois, je heurte des applications dans lesquelles tous les codes sont disponibles (oui, les clients doivent toujours acheter tout le code source des trucs 3ème partie, mais parfois ils ne le font pas). P > Mais disent que ceci est un exemple pour lequel je n'ai pas le code, ou uniquement les fichiers d'interface (BDE.int personne?)
Quels paramètres a-t-il (c'est-à-dire quelle surcharge potentielle)?
Quel type de retour a-t-il? P> est-ce la même chose pour toute version de Delphi? P> - Jeroen P> Edit 1 < / em> strong>: p> Merci à Rob Kennedy: Tdump -e DBRTL100.BPL Strong> Le truc. Pas besoin de Merci à Tondrej qui a trouvé ce Article allemand EDN ( Traduction Google Google ).
Cet article décrit le format assez précisément, et il devrait être possible de créer du code Delphi pour vous désigné. P> Pitty que le site Web mentionne (et l'e-mail) est maintenant mort, mais bon de la connaître info. p> - Jeroen P> P>
4 Réponses :
à partir des fichiers source DELPHI 2007:
function GetTableNameFromSQLEx(const SQL: WideString; IdOption: IDENTIFIEROption): WideString;
En fait, je sais lequel c'est: Delphi 2007 Mise à jour 3, DBCommon. Cela était plus destiné aux BPLS pour lesquels vous n'avez pas de sources, ni de chasser les sources. J'ai redressé ma question. Désolé pour le dérangement :-)
Il n'y a pas de fonction fournie avec Delphi qui permettra de désigner des noms de fonction, et je ne suis pas au courant d'être documenté n'importe où. Delphi en un mot em> mentionne que le "Tdump "L'utilitaire dispose d'un commutateur --UM em> pour le faire les symboles de démêlement qu'il trouve. Je n'ai jamais essayé. Si cela ne fonctionne pas, cela ne ressemble pas à un schéma très compliqué pour vous mobiliser. Evidemment, le nom commence par "@" et est suivi du nom de l'unité et du nom de la fonction, séparé par un autre signe "@". Ce nom de la fonction est suivi de "$ qqrx", puis des types de paramètres. P> Les types de paramètres sont codés à l'aide du nom de caractères du nom de type suivi du même format "@" - Délimité d'avant. < / p> Le "$" est nécessaire pour marquer la fin du nom de la fonction et le début des types de paramètres. Le mystère restant est la partie "QQRX". C'est révélé par l'article TONDREJ trouvé . Le «QQR» indique la convention appelante, qui dans ce cas est registre em>, a.k.a. fastcall em>. Le "X" s'applique au paramètre et signifie qu'il est constant. P> Le type de retour n'a pas besoin d'être codé dans le nom de la fonction mutilé car la surcharge ne considère pas les types de retour de toute façon. P> p>
Merci - cela aide. En fait, le -um n'est pas nécessaire du tout. Cela fonctionne simplement: c: \ windows \ system32> tdump -e dbrtl100.bpl | grep gettablenamefromsqlex fichier stdin: 00026050 1385 04ac __fastcall dbcommon :: gettablenamefromsqlex (const system :: wwwelstring, dbcommon :: identifiantOption)
Je pense que c'est une amélioration récente, alors. Je suis sûr que Tdump n'a pas toujours fait ça.
Voir aussi Cet article (en allemand) . Je suppose que la mangling est probablement compatible avec l'arrière-marche et de nouveaux systèmes de mangling sont introduits dans les versions ultérieures DELPHI pour les nouvelles fonctionnalités linguistiques. P>
Merci. J'ai lu l'allemand, donc ce n'est pas un problème. Maintenant, je veux accepter deux réponses :-)
Si vous avez C ++ Builder, consultez $ (BDS) \ SOURCE \ CPPRTL \ SOURCE \ MISC \ MIMANGE.C - Il contient le code source du mécanisme d'impertinence utilisé par Tdump, le débogueur et la liaison. (C ++ Builder et Delphi utilisent le même schéma de mangling.) P>
Briljant! Depuis quand était-ce introduit? Je semble que je n'ai que les versions de 2009 et 2010 d'entre eux: D2009-Enterprise \ Source \ CPPRTL \ SOURCE \ MISC \ MIGNOUS.C D2010-Enterprise \ Source \ CPPRTL \ SOURCE \ MISC \ DIMANGER.C Bon matériel de lecture :-)
Je pense que cela existe aussi longtemps que la BCC elle-même. Cependant, le fichier a été appelé u.c au lieu de démangling.c dans les anciennes versions.