Windows编程
anycell
这个作者很懒,什么都没留下…
展开
-
DLL Hell(DLL地狱)问题
DLL动态链接库是程序复用的重要方式,DLL可以导出函数,使函数被多个程序复用,DLL中的函数实现可以被修改而无需重新编译和连接使用该DLL的应用程序。作为一名面向对象的程序员,希望DLL可以导出类,以便在类的层次上实现复用。所幸的是,DLL确实也可以导出类。然而事实却没这么简单,导出类的DLL在维护和修改时有很多地方必需很小心,增加成员变量、修改导出类的基类等操作都可能导致意想不到的后果,也转载 2011-11-01 13:17:06 · 7729 阅读 · 2 评论 -
关于printf float double int64 _int64 long _uint64
下表列出了printf和scanf对于各种格式说明符可以接受的参数类型。格式printfscanf%cintchar *%d, %iintint *%o, %u, %xunsigned intunsigned int *转载 2011-12-06 11:22:33 · 4131 阅读 · 0 评论 -
fastcall cdecl stdcall thiscall
1._cdecl是C Declaration的缩写,表示C语言默认的函数调用方法:所有参数 从右到左依次入栈,这些参数由调用者清除,称为手动清栈(由调用者把参数弹出栈)。对于传送参数的内存栈是由调用者来维护的(正因为如此,实现可变参数的函数只能使用该调用约定)。被调用函数无需要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。 _cdec转载 2011-12-13 13:03:14 · 793 阅读 · 0 评论 -
Windows下调试应用程序堆栈破坏的方法(内存OX****F不能为Read/Write)
经常碰到本来运行很正常的程序,忽然弹出错误对话框,“ "0X****"指令引用的"0X******"内存。该内存不能为"read"或"written"”。接着程序就崩溃退出。这样的错误是程序存在BUG引起堆栈被破坏导致的。不要小看这样的问题,这种导致堆栈破坏的BUG因为不知道下一次什么时候就会出现,具有很强的隐蔽性。所以调试起来也很麻烦。现在介绍一个调试办法:使用GFlags.ex原创 2012-01-07 14:11:10 · 4039 阅读 · 0 评论 -
Windows内核对象无效返回值——NULL或者INVALID_HANDLE_VALUE??
今天看《Windows核心编程》无意间看到内核对象创建函数返回值的一段内容。以前写程序判断句柄无效的时候没有多想,经常用NULL,有时也用INVALID_HANDLE_VALUE。跟我同样犯迷糊的朋友们也要注意了,两者不能混淆的! 如果调用一个函数以便创建内核对象,但是调用失败了,那么返回的句柄值通常是0(N U L L )。发生这种情况是因为系统的内存非常短缺,或者 遇原创 2012-03-11 22:50:25 · 5947 阅读 · 1 评论 -
SuspendThread和printf函数导致死锁问题
#include #include #include unsigned __stdcall thread(void*){ while(1){printf("t"); }}int main(){ unsigned dwThreadId; HANDLE hThread = (HANDLE) _beginthrea原创 2014-04-22 11:07:45 · 1282 阅读 · 0 评论