2012-08-29 5 views
0

L'utilitaire regsvr32 supprime la sortie standard. Par exemple:regsvr32 et sortie standard

STDAPI DllRegisterServer(void) 
{ 
    std::cout << "RegisterServer\n"; 
    return S_OK; 
} 

Lorsqu'il est exécuté avec:

regsvr32 my.dll

rien n'apparaît dans ouput standard (la boîte de message est affiché avec succès). Y at-il de toute façon pour faire apparaître la sortie standard?

+0

-t-il compressent aussi stderr? Juste une pensée ... –

+3

Je ne pense pas qu'il y ait de suppression de sortie standard explicite, plus simplement, 'regsvr32' est une application GUI, et par défaut, stdin et stdout ne sont pas connectés à quoi que ce soit. –

+0

@MatteoItalia, cela ne m'est jamais venu à l'esprit. Merci. – hmjd

Répondre

7

regsvr32.exe une application Windows. Il ne possède pas de console. printf ou std :: cout n'affichera aucun texte.

Si vous insistez pour montrer quelque chose, vous pouvez créer vous-même la console.

appelez les lignes suivantes avant la sortie de votre texte.

AllocConsole(); 
freopen("CONOUT$", "w+t", stdout); 
+0

Merci, je vais essayer. – hmjd

+1

+1 et merci encore. Pour info, j'ai utilisé 'AttachConsole (ATTACH_PARENT_PROCESS);' comme le code dans votre réponse a créé une nouvelle console qui a immédiatement disparu. – hmjd

+0

@hmjd C'est parce que votre procédure de registre DLL est terminée. Peut-être que vous pourriez appeler un MessageBox avant de quitter DllRegisterServed(); – Rango

0

Utilisation avec/c

regsrv32 yourFile.dll /c C://log.txt 
+1

La commande telle que donnée ne fonctionne pas "Le module" c: //blah.log "n'a pas pu être chargé.". Fait intéressant, il ne se trompe pas sur le/c comme d'autres paramètres inconnus. – Deanna

Questions connexes