本文收集ATL的一些技巧。
一、VC6.0带的ATL在COM组件注册时,使用了8.3规则的文件名,主要是为了兼容NT4.0,如果要使用长文件名,可以直接对atlbase.h作些改动。
打开atlbase.h找到inline HRESULT WINAPI CComModule::UpdateRegistryFromResourceS(UINT nResID, BOOL bRegister,
struct _ATL_REGMAP_ENTRY* pMapEntries)函数定义中的
// Convert to short path to work around bug in NT4's CreateProcess
// TCHAR szModuleShort[_MAX_PATH];
// GetShortPathName(szModule, szModuleShort, _MAX_PATH);
// LPOLESTR pszModule = T2OLE(szModuleShort); // ATL短路径的Bug [9/10/2008 冰峰]
LPOLESTR pszModule = T2OLE(szModule);
像我上面这样注释掉即可。
上面的改动只对Release起作用,Debug版本还要在同一个文件中找AtlModuleUpdateRegistryFromResourceD函数,像上面那样注释掉相应的代码。
二、Other
……
一、VC6.0带的ATL在COM组件注册时,使用了8.3规则的文件名,主要是为了兼容NT4.0,如果要使用长文件名,可以直接对atlbase.h作些改动。
打开atlbase.h找到inline HRESULT WINAPI CComModule::UpdateRegistryFromResourceS(UINT nResID, BOOL bRegister,
struct _ATL_REGMAP_ENTRY* pMapEntries)函数定义中的
// Convert to short path to work around bug in NT4's CreateProcess
// TCHAR szModuleShort[_MAX_PATH];
// GetShortPathName(szModule, szModuleShort, _MAX_PATH);
// LPOLESTR pszModule = T2OLE(szModuleShort); // ATL短路径的Bug [9/10/2008 冰峰]
LPOLESTR pszModule = T2OLE(szModule);
像我上面这样注释掉即可。
上面的改动只对Release起作用,Debug版本还要在同一个文件中找AtlModuleUpdateRegistryFromResourceD函数,像上面那样注释掉相应的代码。
二、Other
……