2012-08-13 29 views
1

我认为这是非常基本的。今天我正在建立一个静态链接到ATL的动态链接项目。在构建它时,它挂在“执行注册”阶段,并没有进行。我可以看到在任务管理器中有一个regsvr32.exe。我猜这个过程是在做注册工作。但它永远不会结束。Visual Studio挂在“执行注册”

所以我取消了构建并再次尝试,然后我有一些未解决的外部符号问题。有人可以向我解释为什么会发生这种情况吗?非常感谢你提前! 平台(Windows 7 64,VS 2008)

最好的问候,

回答

0

regsvr32.exe加载您的DLL,并调用其DllRegisterServer导出函数。假设它冻结,你可以用任务管理器,Process Explorer或调试器检查它 - 附加到冻结的进程。原因很可能在您的DLL中,因此您需要解决它,附上调试程序,或者只是开始与C:\Windows\syswow64\regsvr32.exe <full path to your DLL>进行调试会话。

不是说,如果你的DLL是32位的,那么你需要syswow64\regsvr32.exe,而不是system32\regsvr32.exe(否则调试对象就会启动一个子进程,它将冻结而不被调试)。

+0

该项目没有DllRegisterServer。只有一个模块属性,如:[module(dll,uuid =“{**** - **** - **** - *** - ***}”, \t \t name =“module”, \t \t helpstring =“demo module”, \t \t resource_name =“IDR_DemoModule”)]; – Roy 2012-08-13 14:27:26

+0

它确实有,它在你继承的基础上。你可以使用Dependency Walker应用程序来见证这一点。 – 2012-08-13 14:31:50

0

检查taskmanager,查看传入regsvr32.exe的参数是什么,通常注册这样的dll被某些东西阻塞,得到什么阻塞,如果可能的话调试到dllmain。