Le meilleur moyen de convertir le code Delphi C++?
J'ai une application écrite en Delphi, qui compile en Delphi 2007. Je pense qu'il a été initialement écrit en Delphi 7.
De toute façon, j'ai besoin de convertir tous les non-GUI code en C++ parce que je veux sortir une version Mac du logiciel.
Quelle est la meilleure façon de le faire? Tous les raccourcis que je peux prendre pour accélérer le processus?
EDIT: Le code est compilé en code natif, pas .NET.
Il y a d'autres façons de faire de la croix-plate-forme de code. Est-il un supplément à la faire en C++?
Je suis plus à l'aise avec le C++ et voulez quelque chose avec aussi peu de dépendances externes que possible. En outre, le code traite de grandes quantités de données binaires. C'est pourquoi je voudrais le faire en C++.
Alors D est votre ami. digitalmars.com/d
D n'est pas une généralisation de la langue, et aurait besoin de lui pour apprendre une nouvelle langue. De Plus, vous êtes limité à quelques compilateurs, qui ne peut pas avoir le même niveau d'optimisation que le C et le C++ en profiter. Personnellement, je vous recommande de C sur C++ parce qu'il y a plus de choses qui traduisent en C qu'en C++.
Je suis plus à l'aise avec le C++ et voulez quelque chose avec aussi peu de dépendances externes que possible. En outre, le code traite de grandes quantités de données binaires. C'est pourquoi je voudrais le faire en C++.
Alors D est votre ami. digitalmars.com/d
D n'est pas une généralisation de la langue, et aurait besoin de lui pour apprendre une nouvelle langue. De Plus, vous êtes limité à quelques compilateurs, qui ne peut pas avoir le même niveau d'optimisation que le C et le C++ en profiter. Personnellement, je vous recommande de C sur C++ parce qu'il y a plus de choses qui traduisent en C qu'en C++.
OriginalL'auteur Dana Holt | 2009-03-13
Vous devez vous connecter pour publier un commentaire.
Pourquoi ne pas simplement utiliser un OS X compilateur Delphi? Free Pascal allégations à l'appui de Delphes, sur OS X (bien que n'étant pas un Pascal codeur je n'ai pas essayé).
Je n'ai pas jusqu'à ce que j'ai vérifié auprès de notre Père qui es dans les Cieux, Wikipedia.
Bien que n'étant pas sans ses différences c'est de très bons conseils. J'ai utilisé avec succès beaucoup de non-gui "delphi" code sur windows, os x et linux avec seulement des modifications insignifiantes.
Lazare prend également en charge OS X, mais utilise toujours de Carbone.
OriginalL'auteur Chris Lutz
Réponse Simple: Vous ne pouvez tout simplement pas de port non trivial de code Delphi C++ sans une réécriture complète. C++de modèle d'objet est très différent de Delphi. Il n'a pas une classe de base comme TObject à partir de laquelle tous les autres objets sont dérivés, et il manque de soutien pour beaucoup de RTTI de trucs que le code Delphi prend souvent pour acquis. Et il n'y a pas de moyen simple de réimplémenter Delphi RTTI en C++, car beaucoup de c'est fait au niveau du compilateur, et beaucoup de il est basé sur le fait que toutes les classes Delphi descendre de TObject.
C++ également le manque de soutien pour le concept de l'unité initialisation et finalisation sections qui sont si communs dans Delphi, et ce qu'il a, au contraire, est mal cassé. (Regardez en haut de la "statique de l'initialisation de la commande fiasco" pour tous les détails sanglants.)
De Delphi, la gestion des exceptions est aussi beaucoup plus avancé que le C++. C'est en partie le modèle d'objet et en partie de ce compilateur de la magie. De Plus, le C++ n'a pas de support pour le essayez-enfin construire.
Si vous souhaitez porter un projet Delphi pour le Mac, Free Pascal est votre meilleure solution. Il n'est pas 100% compatible avec Delphi, mais il est assez bon pour beaucoup de choses, et vous spécifiquement mentionné que vous n'avez pas besoin de port Delphi GUI choses. Autant que je sache, l'interface graphique de la zone est la source de la plupart de FPC de la compatibilité des faiblesses, si ce n'est pas nécessaire, la FPC est probablement assez proche de la solution idéale pour vos besoins, au moins jusqu'à ce que CodeGear obtient un OSX compilateur. (Qui n'a pas été officiellement annoncé, mais en se fondant sur diverses choses qui ont été dites, il n'est pas déraisonnable de supposer que celui-ci sera disponible dans le courant de l'année prochaine.)
1. Paresseux des travaux de chargement jusqu'à ce que vous avez à jeter non les ressources de la mémoire lors de la fermeture de la singletons. Le destructeur n'est jamais appelé, et les poignées d'obtenir de fuite. Les solutions de contournement pour ce problème sont non négligeables et ont tendance à créer d'autres, des problèmes bien plus graves.
2. Où dois-je même de commencer? D'intercepter les exceptions travaille toujours sur le vrai type de l'exception qui a été soulevée; vous n'avez pas à sauter à travers des cerceaux pour "jeter polymorphically" et "catch polymorphically." Lever une exception, alors qu'il y en a un autre actif n'appelle pas la Fin().
Objets d'Exception contiennent toujours RTTI qui peut être facilement examiné lorsque vous les attraper, rendant négligeable pour récupérer des informations sur la nature de l'exception. Les Exceptions soulevées dans les constructeurs de travail beaucoup mieux, parce que les objets sont initialisés à un état connu avant d'appeler le constructeur.
Je pourrais continuer, mais ce sont les principaux points. Pour dire les choses crûment, gestion des exceptions C++ suce juste en général, et Delphi obtient droit.
OriginalL'auteur Mason Wheeler
Pour la conversion de votre code de Delphes à Rpc, jetez un oeil à
http://ivan.vecerina.com/code/delphi2cpp/.
J'ai utilisé ce de convertir des classes et des fonctions de SysUtils, DateUtils et StrUtils utilisant wxWidgets fonctions. Si vous prévoyez d'utiliser wxWidgets pour le C++ ont un coup d'oeil à http://twinforms.com/products/wxwidgets/wxvcl.php qui a toutes les convertis source.
Si vous souhaitez développer directement Mac OSX applications à l'aide de puis un coup d'oeil à wxForms pour Delphi - http://twinforms.com/products/wxformsdelphi/index.php
OriginalL'auteur
Je pense que ce serait difficile de le faire mécaniquement, alors vous êtes probablement à la recherche à une réécriture complète. Une chose à garder à l'esprit est que, généralement, Delphi utilise essayer...enfin structures pour la gestion des ressources, alors que le C++ utilise une technique connue sous le nom RAII (acquisition de ressources est d'initialisation). Vous devriez lire sur ce et d'autres C++ idiomes avant de procéder à la conversion.
OriginalL'auteur
Si votre code compile en Delphi 2007 .NET assemblées, vous pouvez avoir une option beaucoup plus facile que d'essayer de port à partir de Delphi, pascal objet C++.
Vous pourriez potentiellement compiler votre logique .NET assemblées (et peut-être même des parties de l'INTERFACE utilisateur), et l'utilisation Mono pour fonctionner sur Mac. Vous pourriez écrire un GUI personnalisé autour de Mono, ou même potentiellement rendre un unique, indépendant de la plateforme d'application.
Si c'est le cas, vous êtes probablement dans un écrit à la main et port de C++. Neil post concernant les choses à regarder dans le port est probablement très pertinents, ensuite.
OriginalL'auteur Reed Copsey
La "bonne" façon de faire c'est de le réécrire en Objective C.-je trouver de l'Objectif C un peu bizarre, mais il y a beaucoup de similitudes avec Delphi dans la façon dont les objets se connecter et déléguer.
Vous pouvez être en mesure d'utiliser Gratuit Pascal de le faire plus rapidement, mais vous devriez sérieusement envisager une réécriture.
Je voudrais être en amour avec Embarcadero si ils pouvaient sortir une version Mac OS X de Delphi, qui n'a pas, vous le savez, elle le suce comme Kylix n'. On peut rêver.
Edit: Il y a un grand avantage à rester dans Delphi, et d'avoir une autre version pour les Mac en Objective C. tout d'Abord, cela signifie que vous n'avez pas besoin de réécrire la version sur Windows, la perte de l' (sans doute) des années d'investissement dans le code Delphi. Deuxièmement, Mac logiciel fonctionne différemment de Windows, à partir d'un point de vue de l'INTERFACE utilisateur. Un simple port du produit est inapproprié, et se traîne le développeur de l'aide de la grande fonctionnalités natives de Windows et Mac. Voir: les anciennes versions de MS Word pour Mac ou iTunes pour Windows. Ils regardent et se sentent mal.
K: Correct, je veux utiliser le même code C++ dans les versions PC et Mac.
K - Objectif C est compilé par le biais d'un open-source avant la fin de GCC, qui s'exécute sur Windows. Vous pouvez écrire Objectif des programmes en C qui fonctionne sur Windows. Vous ne pouvez pas utiliser tous Apple interface agréable trucs.
Oui, et pour le financer, le Mac sera plusieurs fois plus cher, en ligne avec le général Mac prix. Sérieusement, à moins que vous cibler exclusivement le marché du Mac, un processus totalement réécrire Objectif C est généralement beaucoup trop cher.
OriginalL'auteur Tim Sullivan
Vous pouvez aussi utiliser Delphi Prism. C'est pour .NET, mais c'est la dernière expression en langage Delphi spec. Il prend également en charge Mac OSX (voir le lien). Aussi les gars de CodeGear/EMBT sont dans les travaux pour un nouveau compilateur, ainsi que pour une nouvelle version de Delphi qui devrait entrer en bêta en avril et de réduire l'écart entre le Prisme et RAD studio. Voir leurs "Programmes Beta".
OriginalL'auteur John Thomas