关于“应用程序实例句柄”——HINSTANCE hInstance的疑问 本帖最后由 shipeiyuan 于 2012-05-02 22:04:38 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *nameDECLARE_HANDLE(HINSTANCE); 这个只能说明HINSTANCE和指针一样大,具体是什么这里看不出来,像HWND,HDC都如此定义,但它们根本不是指针HINSTANCE是exe映像的虚拟地址,HINSTANCE用于区分进程实例仅限于没有隔离进程地址空间的16位windows,现在的windows每个进程有自己的地址空间,两个进程的同一个地址可以是不同的东西,此时HINSTANCE不再具有唯一标识运行中的实例的功能 int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE PreInstance,LPSTR lpCmdLine,int nCmdShow){ hInstance=HINSTANCE(100); //加入这条语句,让程序每次运行是,hInstance值都相等。你这就算是hInstance唯一标志了实例也没用,就像这个函数起不到交换的作用void swap(int a,int b){int c=a;a=b,b=c;} 楼主看的那本书是孙鑫的《深入理解VC++》吧,上面尽是错误的概念。hInstance不是什么句柄,而是进程的虚拟地址的基地址,多个进程的虚拟地址空间的基地址完全可能是重叠的,不重叠的是16位实模式,就是windows3.1等16位windows系统下的样子。现在32位系统都使用保护模式,不怕多个进程地址值一样。 HINSTANCE的值就是这个程序的起始地址。 我也在看这个HINSTANCE,不知道到底有什么用,呵呵 #include<fstream>和#include<fstream.h>的问题请教 小问题 控件捕捉问题(请赐教) VC如何动态调用DLL里的函数? 关于CFileDialog的问题 辞职了,散分!!! 窗口透明的问题 MCIWnd的菜单问题 拜托,拜托!谁能救救我? 关于VC数据库-向各位前辈请教 ftp命令 请教修改复制文件到指定文件夹的代码
DECLARE_HANDLE(HINSTANCE);
这个只能说明HINSTANCE和指针一样大,具体是什么这里看不出来,像HWND,HDC都如此定义,但它们根本不是指针HINSTANCE是exe映像的虚拟地址,HINSTANCE用于区分进程实例仅限于没有隔离进程地址空间的16位windows,现在的windows每个进程有自己的地址空间,两个进程的同一个地址可以是不同的东西,此时HINSTANCE不再具有唯一标识运行中的实例的功能
{
hInstance=HINSTANCE(100); //加入这条语句,让程序每次运行是,hInstance值都相等。
你这就算是hInstance唯一标志了实例也没用,就像这个函数起不到交换的作用void swap(int a,int b)
{
int c=a;
a=b,b=c;
}