草庐IT

c++ - 使用对象方法作为 WinApi WndProc 回调

这个问题在这里已经有了答案:Whycallbackfunctionsneedstobestaticwhendeclaredinclass(6个答案)关闭9年前。我正在尝试制作一个在父窗口中显示控制台窗口的小类。(你可以想象那里显示的聊天或调试信息)现在,由于不同的实例确实有不同的私有(private)变量(例如消息数组或父窗口),我需要使用非静态方法作为Windows事件的回调。我想到了一些方法,将实际的类实例传递给静态回调函数,然后对其调用适当的方法,但在winAPI中,一切都是使用TranslateMessage和DispatchMessage让我没有机会使用自己的参数。我在这里找

c# - PCWSTR 与 LPWSTR

根据我的理解(如果我错了请纠正我),它们之间的唯一区别是字符串是否可以被调用的函数修改。(PCWSTR,LPWSTR)我现在正尝试将字符串从C#传递到需要PCWSTR的函数,但我能找到的只有[MarshalAs(UnmanagedType.LPWStr)]。我说得对吗?(是的,它有效。不过,这并不能证明它没问题。有些事情有效但随后会导致内存泄漏等) 最佳答案 PCWSTR是一种时代错误的恐龙与人类电影风格。查找在Unicode字符串上使用短指针的16位程序就像查找白象一样。只有LPCWSTR和LPWSTR之间的区别才有意义。LPCW

c++ - 为什么 winmain 不设置错误级别?

为什么这个程序可以正确显示消息框,但没有设置错误级别?intAPIENTRY_tWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPTSTRlpCmdLine,intnCmdShow){MessageBox(NULL,_T("Thisshouldreturn90no?"),_T("OK"),MB_OK);return90;}我将上面的代码编译为名为a.exe的可执行文件。我在命令提示符下这样做:c:\>a.exe(messageboxisdisplayed,Ipressok)c:\>echo%ERRORLEVEL%0如果我在返回之前使

c++ - 在 Windows 中从文件名获取驱动器号

是否有WindowsAPI函数可以从Windows路径中提取盘符U:\path\to\file.txt\\?\U:\path\to\file.txt同时正确整理relative\path\to\file.txt:alternate-stream等等? 最佳答案 PathGetDriveNumber如果路径有驱动器号,则返回0到25(对应于“A”到“Z”),否则返回-1。 关于c++-在Windows中从文件名获取驱动器号,我们在StackOverflow上找到一个类似的问题:

c++ - 如何在 C++ 中将 LPCSTR 转换为 LPCWSTR

附加信息我正在构建一个使用WinHttpOpenRequestApi的应用程序,它需要LPCWSTR作为对象名称我正在使用visualstudio2008 最佳答案 最简单的方法是使用ATL:#include#include#includeintmain(intargc,char*argv[]){USES_CONVERSION;LPCSTRa="hello";LPCWSTRw=A2W(a);std::wcoutA2W(ANSI到Wide)分配的任何内存都将在函数退出时释放。 关于c++-

c++ - RegOpenKeyEx 在 HKEY_LOCAL_MACHINE 上失败

您好,我正在尝试读取为我提供firefox.exe路径的注册表值。这存储在HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\MozillaFirefox3.0.10\bin(版本号可以在别处找到)但我似乎无法让RegOpenKeyEx为以下任何内容返回ERROR_SUCCESSHKEY_LOCAL_MACHINE所以这个测试失败了:if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("\\SOFTWARE"),0,KEY_QUERY_VALUE,&keyHandle)==ERROR_SUCCESS)当这个测试通过时:if(RegOpen

c++ - 创建 HWND 的最简单方法

我需要一个MSVC++中的虚拟窗口,它永远不可见,甚至在应用程序的主窗口之前创建。渲染引擎需要它。因此,如果可能的话,我宁愿不必注册类(class)。为了测试,最好让它可见以证明它在那里-我可以使用静态或按钮或其他东西吗?我一直在尝试使用CreateWindow(),但是当我获得返回值时,没有任何可见的东西出现。 最佳答案 我提交自己的测试代码以供批评:HWNDdummyHWND=::CreateWindowA("STATIC","dummy",WS_VISIBLE,0,0,100,100,NULL,NULL,NULL,NULL);

c++ - 将 STDIN 与 AllocConsole() 一起使用

我有一个第三方dll,我加载到不是我的软件中,我正在使用AllocConsole()创建标准的WindowsCLI窗口,所以我有一种输出调试消息的简单方法。但我的问题是,它会忽略任何类型的输入。我只是希望能够使用我分配的控制台并启用我为其提供一些输入的能力。 最佳答案 感谢BenVoigt,我可以通过以下方式让控制台在分配输入后接收输入:freopen("CONIN$","r",stdin);freopen("CONOUT$","w",stdout);freopen("CONOUT$","w",stderr);这也将stdout和s

c++ - 线程中的堆栈大小在 C++ 中定义了什么?

我在我的源代码中使用C++和Windows.h。我在MSDN中阅读了CreateThreadAPI,但我仍然不明白指定堆栈大小的本质。默认情况下为1MB。但是如果我指定32字节会发生什么?线程中的堆栈大小定义了什么?请提供详尽的解释,我将不胜感激。谢谢。 最佳答案 栈用来存放局部变量,函数调用中传递参数,存放返回地址。线程的栈有一个固定的大小,它是在创建线程时确定的。这也是您所指的值(value)。堆栈大小是在创建线程时确定的,因为它需要占用连续的地址空间。这意味着线程堆栈的整个地址空间必须在创建线程时保留。如果堆栈太小,它可能会溢

c++ - Win32API - 如何从进程句柄中获取进程的文件名?

如何从进程句柄中获取进程的文件名?我正在使用Win32C++(VisualC++速成版)。谢谢。 最佳答案 调用GetModuleFileNameEx.从Windows2000开始可用。DWORDWINAPIGetModuleFileNameEx(__inHANDLEhProcess,__in_optHMODULEhModule,__outLPTSTRlpFilename,__inDWORDnSize);对第二个参数使用NULL来获取EXE文件的名称。 关于c++-Win32API-如何