2009-05-07 8 views
2

Au risque d'apparaître comme un dinosaure, j'ai un ancien code C++, compilé avec Borland C++, qui définit des registres, et des interfaces avec un module Assembler, que je voudrais moderniser. Je viens d'installer MS VC++ Express, et inutile de dire que beaucoup de choses ne fonctionnent pas! La valeur par défaut semble être Win32, ce qui est bien, donc j'ai éliminé FAR et énorme. PASCAL semble correspondre à __stdcall. J'ai donc une macroMigration de l'ancien C++ de Borland vers Visual C++ Express

#define THRCOMP extern "C" int FAR PASCAL _Export 

THRCOMP va devant un nom du module. Il en résulte probablement quelque chose comme

extern "C" int __stdcall _Export <modname>; 

que le compilateur n'aime pas, et met un message sur un « anachronisme » (ne dit pas quoi!). Qu'est-ce qui ne va pas?

De plus, les anciens jeux de codes ont un assembleur en ligne que je dois transformer en un sous-programme compilé séparément - y a-t-il un assembleur (libre) et peut-il relier les paquets obj assembleur avec C++? Au fait, je ne peux pas voir mes plateaux obj - mais WinZip les a ramassés! Explication?

Généralement, existe-t-il un guide pour la migration de l'ancien code C++?

Merci d'avance.

Répondre

1

Un couple de choses spécifiques de votre exemple:

  • VC n'aime pas du tout _Export.
  • l'anachronisme est que vous avez des modificateurs (comme __stdcall) sur une déclaration de données. Si <modname> n'a pas de parent, c'est une déclaration de données et les modificateurs ne font rien. Si <modname> est une fonction implémentée dans assembly, vous devez toujours avoir la déclaration inclure la liste d'arguments.

Par exemple:

extern "C" int __stdcall modname(int x); 

Vous pouvez obtenir un assembleur libre de la Windows Driver Kit (WDK - ce qui était appelé le DDK), mais si vous êtes code actuel est écrit en utilisant le compilateur TASM de Borland il pourrait ne pas utiliser la même syntaxe, donc il pourrait y avoir un peu de travail portage. Cependant, si l'assembleur actuel est un code de 16 bits, vous allez avoir beaucoup de travail pour le porter vers l'assembleur 32 bits de toute façon ...

+0

Merci pour votre réponse rapide! _export était le problème! Une idée de ce qui est arrivé à mes fichiers obj? Merci d'avance. –

+0

Je ne suis pas sûr de ce que vous voulez dire par "ne peut pas voir mes ponts obj" - ne peut pas les voir dans quoi? –

+0

Je viens de changer une option pour afficher l'Asm généré, et les paquets obj sont maintenant visibles! Winzip les a ramassés avant, mais je ne pouvais pas les voir dans l'Explorateur Windows - ça semble OK maintenant :) J'ai encore quelques bizarreries, mais j'espère les retrouver finalement ... Encore une fois. –

Questions connexes