犯过的错

来源:互联网 发布:非关系数据库有哪些 编辑:程序博客网 时间:2024/04/28 22:30

6.以lib加.h方式使用DLL时,使用的文件和dll自己的文件不是同一份,我在.h中添加了一个成员变量,以为不需要对使用的文件进行同步,结果发现这是错的,只要dll这边的导出函数或是导出类的内存结构发生了变化就必须同步.h和.lib,当然如果你所加的变量是放在导出类的最后,可能暂时不会出问题,但如果仔细看每个变量的地址就会发现,是错的! 针对需要同步.h和lib的dll使用解决方案:在Post-Build Event中把生成的lib和.h复制到对应的目录(用vc8的话可以用$(TargetDir))copy $(TargetDir)/somedlg.lib ../anotherDir/somedlg.lib;

5.在循环体中使用A2W之类的宏来转换字符串,因为这一类宏中分配的内存是在函数体内有效的,所以在循环次数比较多时就会出现栈溢出!!可以改成CComBSTR等在堆上分配内存的函数,或及时释放内存。

4.在加锁的函数体中间用了return而没有解锁。
   推荐的做法是用goto

3.在使用VC包装的智能指针类时,将m_spXXX = NULL;然后再去调用m_spXXX.CreateInstance(...)出错.
   呵呵,把指针设成NULL了,他又怎么可能创建成功我想要的东西呢.+_+

2.在定义接口时,对参数类型为字符串的没有加上[string]说明,导致在unicode下编辑出来的类型是unsigned short类型,如果实现接口时的参数用WCHAR就会出问题,编译不过。正确的使用方法:

[helpstring("方法 DrawText")]
HRESULT DrawText([in, string] WCHAR* pwszText, [out, retval] DWORD* pdwRet);
实现时:
STDMETHOD(raw_DrawText) (WCHAR* pwszText,   DWORD* pdwRet);

1.用ResetEvent来替换SetEvent导致死锁    2008.01.02 

原创粉丝点击