win32应用程序的HINSTANCE传递给WinMain,但有没有其他方法可以确定当前的HINSTANCE(如果你不知道,我是win32编程的新手!)?我需要在库中创建一个窗口(因为库是跨平台的),id不想传递它.
本的定义WinMain为:
int CALLBACK WinMain(
_In_ HINSTANCE hInstance,
_In_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nCmdShow
);
Run Code Online (Sandbox Code Playgroud)
我的理解是:
hInstance是应用程序实例的句柄,并且可以在不使用DLL时进行检索GetModuleHandle(NULL)szCmdLine 是命令行参数,可以重试 GetCommandLine()nCmdShow 通常是 SW_SHOW然而,即使是在20 世纪90年代后期的书中,也从来没有遇到任何用法.那么,使用什么,究竟是什么呢?hPrevInstancehPrevInstance
有没有办法HINSTANCE从WinAPI 转发声明类型而不包括完整(和大)windows.h标题?
举例来说,如果我有一个类RenderWindow拥有的HINSTANCE mInstance,我将不得不包括windows.h在RenderWindow.h.因此,所需的一切RenderWindow也必须包括在内windows.h.
我试过包括,windef.h但这似乎需要一些东西windows.h.:-(如果我不能转发声明它,是否至少有一种可移植的方式来使用像long mInstancein RenderWindow而不是HINSTANCE?
我试图了解自解压 PE 文件的工作原理。有人可以解释为什么我的代码不起作用,或者修复 main() 部分。
\n\n#include <iostream>\n#include <Windows.h>\n\nusing namespace std;\n\nvoid ExtractResource(const HINSTANCE hInstance, WORD resourceID, const char* outputFilename);\n\nint main()\n{\n HINSTANCE hInst = GetModuleHandle (0);\n ExtractResource(hInst, 101, "101.dll");\n ExtractResource(hInst, 102, "102.dll");\n ExtractResource(hInst, 103, "103.dll");\n ExtractResource(hInst, 104, "104.dll");\n cout << "Files are now extracted!";\n Sleep(INFINITE);\n}\n\n\nvoid ExtractResource(const HINSTANCE hInstance, WORD resourceID, const char* outputFilename){\n\n // First find and load the required resource \n\n HRSRC hResource = FindResource(hInstance, MAKEINTRESOURCE(resourceID), "BINARY");\n\n if(hResource==NULL)\n\n return;\n\n HGLOBAL hFileResource = LoadResource(hInstance, hResource);\n\n\n\n // Now open and map this …Run Code Online (Sandbox Code Playgroud) 我正在编写一个缓存处理程序,它需要为每个应用程序实例提供一个唯一的ID号,这样当有人在两个实例中打开两个项目时,缓存就不会混淆了.根据这个线程,看起来HINSTANCE传递的WinMain是模块的句柄,它可以只是exe,不一定是唯一的进程ID.
线程似乎说有关要运行的模块/进程的信息只被带入内存一次,并且HINSTANCE是一个句柄.这是否意味着HINSTANCE不能将其用作流程的唯一标识符,因为它们都指向同一个模块?还是我弄错了?