|
|
发表于 2007-3-10 18:06:00
|
显示全部楼层
Re:初学者发问,关于DX9 API文档中的一些英文翻译~~~ 仁杰~
hPrevInstance
[in] Handle to the previous instance of the application. For a Win32-based application, this parameter is always NULL.
If you need to detect whether another instance already exists, create a uniquely named mutex using the CreateMutex function. CreateMutex will succeed even if the mutex already exists, but the GetLastError function will return ERROR_ALREADY_EXISTS. This indicates that another instance of your application exists, because it created the mutex first.
lpCmdLine
[in] Pointer to a null-terminated string that specifies the command line for the application, excluding the program name
//====================================
意思是:
hPrevInstance
[传入参数]当前应用程序的前一个实例句柄.在Win32应用程序中,这个参数通常设置为NULL.
如果你要判断另外一个实例是否依旧存在,可以使用CreateMutex方法去创建一个唯一命名的互斥体Mutex.即使互斥体Mutex已经存在,CreateMutex也会成功.但是(此时再调用)GetLastError方法会返回一个ERROR_ALREADY_EXISTS的值.根据这个,你就可以知道你的应用程序已经有另外一个实例了,因为它在之前已经创建了一个互斥体Mutex.
lpCmdLine
[传入参数]它是一个指向空结尾字符串的指针.这个字符串是传输给应用程序的一个命令参数.这里不需要写入程序的名称.
笃志按:
其实hPrevInstance 这参数早就没用了,别理它了,创建互斥体Mutex来判断是否已存在实例也没必要按MSDN中说的那样使用CreateMutex方法.恩,这里不好理解,我再详细说下吧.
个人理解"互斥体Mutex"就是一个线程,和CreateThread很类似的,区别是在于Thread仅仅能在一个进程中进行通信,而Mutex能在多个进程中通信.也正因为这一点,所以Mutex不能以句柄做为唯一标识,因为进程中是无法传递句柄的哦,所以,要区别Mutex,依靠的是它的名称,这也是为什么要创建一个"a uniquely named mutex"的原因了.但是要是没记错的话,CreateMutex方法是这样的,它会创建一个不存在的Mutex,但是若这个Mutex已经存在,它就会自动打开而不会新创建,仅仅是GetLastError的值发生了改变,如上文说明中就是使用这个方法来判断是否已有应用程序实例,而实际上,还有一个打开Mutex的方法,它仅会打开已有的Mutex,而不会生成新的Mutex,根据这个方法的返回bool值可以更方便的进行判断,不过因为在网吧,没办法查看MSDN,猜测是OpenMutex之类的函数吧.
lpCmdLine中的命令参数可能不好理解,那么你玩CS吗,呵呵,在它的快截方式属性中,添加一项 -console -win 的话,就会发现CS会窗口化运行,这就是命令参数了,呵呵,清楚了吧.
呵呵,以上都是个人见解,有错误的希望高手指正.
另:小吉..没必要帖子上还写个名字吧...狂汗.... |
|