2010-12-07 45 views
5

J'ai une application Delphi (2007) qui est juste un exe standard, et j'aimerais y ajouter une interface COM. J'ai déjà une DLL COM qui exporte plusieurs objets COM et cela fonctionne parfaitement. Cependant, quand j'ai essayé d'insérer la logique COM de la DLL (ie "exports" et "{$ R * .TLB}" et les utilisations appropriées) dans le fichier dpr de EXE, tout compile parfaitement mais refuse de s'enregistrer quand j'appelle regsvr32 myname.exeComment écrire un EXE qui est aussi un serveur COM en Delphi

J'ai également essayé de créer une application VCLForms complètement nouvelle et d'y ajouter un AutomationObject via les assistants IDE, mais Delphi ne semble pas vouloir le faire car aucun composant ActiveX n'est disponible.

Est-il même possible de faire ce que je tente? Si oui, quelqu'un a-t-il une idée de ce qui pourrait mal se passer?

Merci

+0

Courez-vous sur Windows 64 bits? Vista/7? –

+0

Oui, je suis sous Windows 7 64 bits – Steve

+0

On dirait que vous avez votre réponse. Mon point était que sur Windows 64 bits, vous devez travailler un peu pour obtenir la version 32 bits de regsvr32. Bien sûr, je n'ai pas twig que puisque c'est un exe plutôt que dll vous n'avez pas besoin d'un programme séparé pour héberger le code pour faire self-reg. –

Répondre

7

Je ne suis pas sûr que regsvr32 fonctionne, vous devez exécuter app.exe/regserver ou app.exe/unregserver.

+0

En effet, il suffit de lancer votre application avec/regserver ou/unregserver. Tout est géré dans l'unité ComServ.pas. –

+0

Brillant. Merci. Cela fonctionne parfaitement maintenant. – Steve

1

Est votre exe exporter DllRegisterServer et DllUnregisterServer?

+0

Oui, c'est le cas. Je viens de remarquer que regsvr32 ne montre pas la boîte de dialogue d'enregistrement réussie. En fait, il montre juste un sablier pendant quelques secondes et puis sort. – Steve

+0

quelle est la valeur de retour DllRegisterServer alors? – Remko

+0

Je ne sais pas, mais comme Richard Chamberlain a souligné l'erreur de mes façons je ne vais pas essayer de le savoir. Merci pour votre aide de toute façon. – Steve