DLL 实现多语言

cpp 中定义int g_currentLanguage = LG_ENGLISH; // 定义一个全局变量,用来标示当前使用的语言HINSTANCE hinsDll; // 定义一个全局实例句柄,用来存储 DLL 的实例句柄.h 中声明extern int g_currentLanguage;extern HINSTANCE hinsDll;enum{ // 定义语言的枚举值LG_ENGLISH = 0,LG_CHINESE = 1};切换使用的语言void CMainFrame::OnMenuitemChinese() // 中文{g_currentLanguage = LG_CHI...
(编程)Work | 2007-04-28 23:31 | 阅读 1821 次 | 评论 0 条

检测内存泄漏

检测内存泄漏:检测内存泄漏的关键是要能截获住对分配内存和释放内存的函数的调用。截获住这两个函数,我们就能跟踪每一块内存的生命周期,比如,每当成功的分配一块内存后,就把它的指针加入一个全局的list中;每当释放一块内存,再把它的指针从list中删除。这样,当程序结束的时候,list中剩余的指针就是指向那些没有被释放的内存。这里只是简单的描述了检测内存泄漏的基本原理,详细的算法可以参见Steve Maguire的<<Writing Solid Code>>。如果要检测堆内存的泄漏,那么需要截获住malloc/realloc/free和new/delete就可以了(其实new/delete最终...
(编程)Work | 2007-04-28 21:52 | 阅读 1679 次 | 评论 0 条

#pragma once 和 #ifndef #define ...#endif

#pragma once 这个是编译相关,就是说在这个编译系统上能用,但是在其他编译系统 不一定型,也就是说移植型差。不过现在基本上已经是每个编译器 都有这个定义了 #ifndef #define ...#endif 这个是C++语言相关,这是C++语言中的宏定义,通过宏定义避免文件 多次编译。所以在所有支持C++语言的编译器上都是有效的。如果写的程序要 跨平台,最好使用这种方式。
(编程)Work | 2007-04-28 19:36 | 阅读 2945 次 | 评论 0 条

线程的堆栈 改变内存块的大小

20.4函数转发器函数转发器是DLL的输出节中的一个项目,用于将对一个函数的调用转至另一个DLL中的另一个函数。如果调用下面的函数,GetProcAddress就会查看Kernel32的输出节,发现HeapAlloc是个转发函数,然后按递归方式调用GetProcAddress函数,查找NTDLL.dll的输出节中的RtlAl-locateHeap。GetProcAddress(GetModuleHandle(“Kernel32”),”HeapAlloc”);也可以利用DLL模块中的函数转发器。最容易的方法是像下面这样使用一个pragma指令:#pragma comment(linker,...
(编程)Work | 2007-04-24 19:49 | 阅读 3374 次 | 评论 0 条
浏览318264次