Articles of 视觉工作室

64位窗口 – 我需要使用IMAGE_NT_HEADERS64?

我试图读取Windows 64环境中的一些进程的PE头,因为我的代码只是读取IMAGE_NT_HEADERS结构的32位和64位可执行文件,我想知道:我需要写一些像 if executable is 64 bit use IMAGE_NT_HEADERS64 else use IMAGE_NT_HEADERS ? 我的代码似乎只使用IMAGE_NT_HEADERS 64和32位进程工作,我错过了什么?

CBitmap :: LoadBitmap()拒绝加载资源

我正在处理一个包含位图资源的DLL。 我通过Visual Studio中的资源视图导入了该位图。 该DLL还会导出一个具有试图加载位图的函数的类: BOOL CMyExportedClass::Create(CWnd* pParentWnd /*= NULL*/) { if (!m_bitmap.LoadBitmap(IDB_BITMAP1)) return FALSE; // … } 从MFC应用程序我加载DLL。 在应用程序InitInstance()函数内部,我调用一个最终调用CMyExportedClass::Create()的DLL的导出函数。 但是, LoadBitmap()总是返回0 ,根据文档指出内存不足(不是这种情况)或资源不存在。 位图文件是我的DLL项目的一部分, IDB_BITMAP1在.rc文件中以及在resource.h中定义 : MyDLL.rc: IDB_BITMAP1 BITMAP "res\\mybitmap.bmp" RESOURCE.H: #define IDB_BITMAP1 1034 我已经检查过,ID只定义了一次。 FWIW:在调用LoadBitmap() ,DLL InitiInstance()函数已经成功返回。 LoadBitmap()拒绝加载资源的原因是什么?我该如何解决这个问题? 编辑: 我可以成功加载资源,而不是m_bitmap.LoadBitmap(IDB_BITMAP1)我做到以下几点: HBITMAP hBitmap = (HBITMAP)LoadImage(hCurrentModule, MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0, 0); if(hBitmap) m_bitmap.Attach((HBITMAP)hBitmap); 那么CBitmap::LoadBitmap()和LoadImage()函数在这里有什么LoadImage()呢?

什么是WINAPI_FAMILY_ONECORE_APP?

我正在通过GitHub微软的OpenSSL端口。 一个提交引起了我的注意,那就是添加Win10通用平台支持 。 在提交中,出现了名为WINAPI_FAMILY_ONECORE_APP的分区。 不过,在search时我并没有find太多的东西。 英文有两首,中文有二十二首(见下)。 以下Visual Studio Tools for Windows 10 Preview中的新function提供了一些没有任何解释的准点符号: 新的API分区WINAPI_FAMILY_ONECORE_APP ARM 64 通用CRT … 我有两个问题: 什么是WINAPI_FAMILY_ONECORE_APP ,以及如何使用它? 我可以使用WINAPI_FAMILY_ONECORE_APP 检测Windows 10小工具上的Aarch64 / ARM64吗? 这里是微软在OpenSSL中的使用( 从ssl/dtls1.h ; C ++注释被移到了define的可读性之上): // winsock.h not present in WindowsPhone/WindowsStore, defining the expected struct here #if defined(WINAPI_FAMILY) && ( WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP || WINAPI_FAMILY==WINAPI_FAMILY_PC_APP || WINAPI_FAMILY==WINAPI_FAMILY_ONECORE_APP) struct next_timeout { long […]

用Visual Studio 2010构buildLinux内核

有没有人有关于如何使用Visual Studio 2010构buildLinux内核的分步说明? 我试图直接寻找这个问题的解决scheme,但没有喜悦。 我已经能够发现的一些事情: Linux内核是使用GNU C编译器构build的,因此先决条件是构build一个Windows GNU C编译器,以便编译一个Linux GNU C编译器。 我知道GNU C编译器的源代码可以从GNU.org获得,但是有没有人使用Microsoft Visual Studio 2010 C / C ++编译器为Windows构build了GNU C编译器? 一旦制作了Linux GNU C编译器,我就可以使用它来构buildLinux内核以及任何其他基于Linux的软件来获得Linux系统。 这是我从www.linuxfromscratch.org得到的 你们中的一些人可能想知道为什么我不简单地为此下载一个预编译的GNU C编译器? 我工作的环境与任何外部networking完全分离。 即使运动鞋网是不允许的。 每一个软件都必须从源代码编译,这些源代码必须手工input。 这是低效的,但也是偏执安全的。 (不要问,我不是老板…) 无论如何,我们正在考虑引入内部的Linux机器,但是我们从Windows 7和Visual Studio 2010开始。有人可以告诉我们如何将所有重新input的源代码转换成可用的GNU C编译器视窗? 还为Linux? 感谢您的任何build议!

Linux上的哪些C ++ IDE与Visual Studio相比具有“智能感知”或​​更好?

pipe道中有一些基于Linux的C ++项目。 我应该select什么样的IDE,它与某种纯粹的Visual Studio(也就是说,没有Visual Assist类固化)相比具有某种“智能感”。 (请注意,我没有使用“和…一样好或者更好”的字眼,我认为Visual Studio C ++中的intellisense一切都很好,因此与“Visual Assist”的评论相同)。

Qt5静态生成收益无法加载平台插件“窗口”

我正在使用Visual Studio 2012在Windows上编写Qt应用程序。 使用Qt插件和一个定制的Qt 5.0.2 静态分发。 每当我运行应用程序时,我遇到了可怕的"Failed to load platform plugin windows"错误。 我已经将以下内容添加到链接器input中: imm32.lib winmm.lib Ws2_32.lib qtmaind.lib Qt5Cored.lib Qt5Guid.lib Qt5Widgetsd.lib 起初我以为也许我应该添加“qwindowsd.lib”到那个列表,但是这并没有解决问题。 为了使我的应用程序运行,我需要做些什么?

如何摆脱Visual Studio(strcpy,sprintf,strdup)中的“不安全”警告/错误

我试图摆脱一些编译器警告说,strcpy,sprintf等是不安全的。 我得到了为什么他们不安全,但我想不出一种以C ++风格修复代码的好方法。 下面是代码的摘录: extList->names[i]=(char *)malloc(length*sizeof(char)); strcpy(extList->names[i],extName); // unsafe // strncpy(extList->names[i],extName,length); // also unsafe 这里是消息: C4996:'strcpy':这个函数或variables可能是不安全的。 考虑使用strcpy_s来代替。 要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS。 详细信息请参见在线帮助。 我不能想到一个安全的方式来复制C ++中的数据,而不知道要复制的东西的长度。 我知道有strlen(),但这也是不安全的,因为它假定(也许不正确),数据是空终止的。 也: // used to concatenate: sprintf(extStr,"%s%s",platExtStr,glExtStr); C4996:'sprintf':这个函数或variables可能是不安全的。 考虑使用sprintf_s代替。 要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS。 详细信息请参见在线帮助。 使用std :: string来连接很容易,但是我需要以某种方式将数据转换为extStr(而不是使用strcpy,lol)。 string :: c_str()函数返回一个指向不可修改的数据的指针,所以我不能把extStr设置为等于它。 (而且我甚至不确定c_str()指针是否需要稍后调用它的delete?是否使用“new”分配空间?) 有关这个东西的任何意见? 这是一个不是我的10,000行文件的一部分…所以我不是热衷于重写C ++方式的东西。

WinDBG适用于从Visual Studio 2015中保存的转储,但不是任务pipe理器。 显示exception代码“找不到”

我无法使用任务pipe理器(32位或64位)或Process Explorer创build转储文件,以便在WinDBG或Visual Studio 2015中提供有用的结果,而直接从VS编写的转储在两者中都非常出色。 我需要任务pipe理器转储工作,以便我可以分析我的最终用户发送的转储文件。 我已经将问题简化为在VS 2015 C ++中创build的最简单的可能的Win32应用程序,并且故意写入NULL指针以引发exception。 如果我在VS中运行程序并使用Save Dump As,当发生exception时,可以在VS和WinDBG中使用转储文件来查看导致问题的代码。 这是预期的。 但是,如果我在VS之外运行应用程序,那么Windows将显示通常的对话框: “Win32Project.exe已停止工作…debugging/closures程序”。 虽然这个对话框仍然活跃,我去任务pipe理器32位,并select创build转储文件。 但是将这个转储文件加载到VS或者WinDBG中并没有提供有用的信息。 特别是VS显示exception代码为“未find”。 点击“仅使用本地debugging”会导致“应用程序处于中断模式”。 见下文… 我正在运行一个新的Win 10 64位PC。 DMP,PDB和EXE文件在同一个目录下,我已经无休止地尝试了符号目录 加载.DMP文件后的Visual Studio 2015输出: Dump Summary ———— Dump File: Win32Project1 (4).DMP : C:\Users\Rob\AppData\Local\Temp\Win32Project1 (4).DMP Last Write Time: 24/08/2017 16:38:27 Process Name: Win32Project1.exe : C:\Temp\ConsoleAp2\Win32Project2\Debug\Win32Project1.exe Process Architecture: x86 Exception Code: not found Exception […]

如何在一个窗口中embeddedWebKit?

可能重复: 如何将WebKitembedded到我的C / C ++ / Win32应用程序中? 我正在尝试将WebKit项目embedded到我的解决scheme中。 起初,我想只是在一个典型的窗口中呈现Webkit,并使其加载一些伪随机URI。 我尝试从http://svn.webkit.org/repository/webkit/trunk/Source/检查源代码,然后立即混淆了包含哪些头文件。 我从webkit/win/WebView.h ,它抛出一个错误,说不能包含Webkit.h够好,没有这样的文件…然后我开始阅读官方文档,但发现没有任何东西除了Objective-C甚至没有说明包含哪些function。 我正在开发Visual Studio 2010和Windows 7.最后,我希望项目能够在Linux上运行,但是这个要求现在不在桌面上。 我试着用Googlesearch来获得帮助,这些帮助并没有真正显示任何代码示例的结果,也没有显示我实际应该做什么的信息。 我对Qt,Gecko都不感兴趣。 我想我想使用WebView,但我真的不知道如何和我的C + +技能是生锈的,我所知道的只是概念,我没有做任何事情与语言。

如果EBP帧指针为NULL,堆栈是否损坏?

我对堆栈跟踪的理解基本上是基于什么是基本指针和堆栈指针? 他们指的是什么? 。 一个多年来一直在帮助开发的程序在崩溃时吐出了一个堆栈转储,我习惯于评估这些堆栈跟踪,与C ++编译器生成的.map文件相对应。 很多时候,我已经成功地走过堆栈和debugging问题。 但是,有时堆栈跟踪有一个NULL EBP(帧)指针。 这是来自这样一个示例堆栈转储的相关代码片段: Initial EBP pointer value: 04d8fab0 {at address 04d8fab0: 00000000} 正如你所看到的,EBP帧指针的值是NULL。 所以我不能走栈。 这是一个损坏的堆栈的标志,还是有另一种可能的解释?