ATL3.0组件注册bug的解决方法
来源:互联网 发布:卖淘宝小号 编辑:程序博客网 时间:2024/05/14 22:39
ATL3.0编写的组件在注册时,如果组件所在目录包含中文路径,不能在注册表生产正确的路径,从而产生虽然注册成功,却不能使用的问题,因为在注册表记录的DLL路径中文部分有乱码。这个问题很久以前就发现,一直没有解决。前段时间在网上搜索到解决方案,并转载在blog上,却一直没有实际试用。今天企图使用,却发现不成功,昏倒,试了几次都不行。看来网上的代码还是不能轻信。不知道文章的作者有没有实际调试成功,不过思路是没错的,因此自己改了下,调通了,这里记录一下。
解决方案:修改STAREG.H文件,修改196行开始的AddChar 和 AddString函数,修改后的代码如下:
BOOL AddChar(const TCHAR* pch) { //if (nPos == nSize) // realloc //fix register bug with chinese path if (nPos == nSize - 1 ) { nSize *= 2; p = (LPTSTR) CoTaskMemRealloc(p, nSize*sizeof(TCHAR)); } p[nPos++] = *pch;#ifndef _UNICODE if (IsDBCSLeadByte(*pch)) p[nPos++] = *(pch + 1);#endif return TRUE; } BOOL AddString(LPCOLESTR lpsz) { USES_CONVERSION; LPCTSTR lpszT = OLE2CT(lpsz); while (*lpszT) { AddChar(lpszT);#ifndef _UNICODE //fix bug with chinese path if (IsDBCSLeadByte(*lpszT)) lpszT++;#endif lpszT++; } return TRUE; }
编译时必须使用_ATL_STATIC_REGISTRY,即静态链接ATL代码,而不使用ATL.dll,否则无效,因为正是ATL.dll的代码出了问题。
—————————————————————————————————
本文原创自Slience的csdn技术博客。
本博客所有原创文章请以链接形式注明出处。
欢迎关注本技术博客,本博客的文章会不定期更新。
大多数人想要改造这个世界,但却罕有人想改造自己。
世上没有绝望的处境,只有对处境绝望的人。
————By slience
—————————————————————————————————
0 0
- ATL3.0组件注册bug的解决方法
- ATL3.0组件注册bug的解决方法
- C#写的COM组件注册问题兼论微软Regasm注册的BUG
- QQ安装时注册组件不动的解决方法
- ATL3.0中的窗口类
- ATL3.0中的窗口类
- ATL3.0中的窗口类
- ATL3.0中的窗口类
- ATL3.0中的窗口类
- ATL3.0中的窗口类
- ATL3.0中的窗口类
- ATL3.0中的窗口类
- ATL3.0中的窗口类-客户端使用ATL创建DUI框架的起点
- 注册组件的过程
- 组件的注册
- DTree的BUG解决方法
- CButtonST的BUG解决方法
- 浮动bug的解决方法
- 直接插入排序
- USACO transform
- HDU1071
- 为什么需要序列化
- USACO namenum
- ATL3.0组件注册bug的解决方法
- 简单选择排序
- php pdo方式连接问题- 驱动找不到
- 精通安卓性能优化-第一章(二)
- Linux下多核环境Erlang的SMP测试
- 内部类的使用
- jps,jstat,jinfo,jmap,jhat,jstack工具的使用/查看Linux磁盘信息
- SecureCRT 属性设置
- 辞职后的感想