C++ 从资源中提取时出现错误1814
试图从资源加载一个可执行文件,我得到了错误1814,我显然不明白为什么会这样。 我的源代码如下所示 资源.hC++ 从资源中提取时出现错误1814,c++,winapi,resources,C++,Winapi,Resources,试图从资源加载一个可执行文件,我得到了错误1814,我显然不明白为什么会这样。 我的源代码如下所示 资源.h IDR_EXE1 EXE "C:\\Users\\*****\\Documents\\Visual Studio 2015\\Projects\\HelloWorldMessageBoxExample\\Debug\\HelloWorldMessageBoxExample.exe" 现在,我要从资源加载它的源代码如下所示: #include "stdafx.h" #include &
IDR_EXE1 EXE "C:\\Users\\*****\\Documents\\Visual Studio 2015\\Projects\\HelloWorldMessageBoxExample\\Debug\\HelloWorldMessageBoxExample.exe"
现在,我要从资源加载它的源代码如下所示:
#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>
#include <iostream>
#include "resource.h"
int main()
{
HMODULE hModule = GetModuleHandle(NULL);
HRSRC hrsrc = FindResource(hModule, MAKEINTRESOURCE("IDR_EXE1"), L"EXE");
if (hrsrc == NULL) {
printf("Error finding Resource, Reason :%d", GetLastError());
getchar();
}
HGLOBAL hLoaded = LoadResource(NULL, hrsrc);
if (hLoaded == NULL) {
printf("Error Loading Resource, Reason: %d", GetLastError());
getchar();
}
LPVOID lpLock = LockResource(hLoaded);
if (lpLock == NULL) {
printf("Error Loading Locking Resource, Reason: %d", GetLastError());
getchar();
}
DWORD dwSize = SizeofResource(NULL, hrsrc);
if (dwSize == NULL) {
printf("Cannot Get Size of Resource, Reason: %d", GetLastError());
getchar();
}
HANDLE hFile = CreateFile(L"C:\\Users\\*******\\AppData\\Local\\vaxi\\hiMsg.exe", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == NULL) {
printf("Cannot Create File,Reason : %d", GetLastError());
getchar();
}
DWORD dwBytesWritten;
if (!WriteFile(hFile, lpLock, dwSize, &dwBytesWritten, NULL))
{
printf("Write File Failed,Reason : %d", GetLastError());
}
if (!CloseHandle(hFile))
{
printf("Close Handle Failure, Reason: %d", GetLastError());
}
else {
printf("Extracted Correctly!\n");
}
if (!ShellExecuteA(NULL, "open", (char*)hFile, 0, 0, SW_SHOWNORMAL)) {
printf("Shell Execute Failed, Reason: %d", GetLastError());
}
return 0;
}
#包括“stdafx.h”
#包括
#包括
#包括
#包括“resource.h”
int main()
{
HMODULE HMODULE=GetModuleHandle(NULL);
HRSRC HRSRC=FindResource(hModule,MAKEINTRESOURCE(“IDR_EXE1”),L“EXE”);
if(hrsrc==NULL){
printf(“查找资源时出错,原因:%d”,GetLastError());
getchar();
}
HGLOBAL hLoaded=LoadResource(NULL,hrsrc);
如果(hLoaded==NULL){
printf(“加载资源时出错,原因:%d”,GetLastError());
getchar();
}
LPVOID lpLock=锁资源(已加载);
if(lpLock==NULL){
printf(“加载锁定资源时出错,原因:%d”,GetLastError());
getchar();
}
DWORD dwSize=SizeofResource(NULL,hrsrc);
if(dwSize==NULL){
printf(“无法获取资源的大小,原因:%d”,GetLastError());
getchar();
}
HANDLE hFile=CreateFile(L“C:\\Users\\********\\AppData\\Local\\vaxi\\hiMsg.exe”,一般写入,0,NULL,始终创建,文件属性,正常,NULL);
if(hFile==NULL){
printf(“无法创建文件,原因:%d”,GetLastError());
getchar();
}
德沃德·德比泰斯;
if(!WriteFile(hFile、lpLock、dwSize和dwbytesswrite,NULL))
{
printf(“写入文件失败,原因:%d”,GetLastError());
}
如果(!CloseHandle(hFile))
{
printf(“关闭句柄失败,原因:%d”,GetLastError());
}
否则{
printf(“正确提取!\n”);
}
如果(!ShellExecuteA(NULL,“打开”,“字符*)hFile,0,0,SW_SHOWNORMAL)){
printf(“Shell执行失败,原因:%d”,GetLastError());
}
返回0;
}
我仍然得到错误1814这里到底有什么错误?错误代码是错误\u资源\u名称\u未找到
:
在映像文件中找不到指定的资源名称
错误是正确的
MAKEINTRESOURCE(“IDR_EXE1”)
生成了错误的名称,因此未找到任何资源。你误用了宏。正确的用法是MAKEINTRESOURCE(IDR\u EXE1)
。不是每个人都知道/记住1814错误是什么。请始终复制错误消息的确切文本,并将其添加到您的问题中。如果这是Visual Studio,请从“输出”选项卡复制它。请不要使用文本图片。当我编译MAKEINTRESOURCE(“IDR\u EXE1”)
时,我得到了(从较大的类型转换为较小的类型)。事实证明,编译器警告实际上是有用的!