Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从资源中提取时出现错误1814_C++_Winapi_Resources - Fatal编程技术网

C++ 从资源中提取时出现错误1814

C++ 从资源中提取时出现错误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 &

试图从资源加载一个可执行文件,我得到了错误1814,我显然不明白为什么会这样。 我的源代码如下所示

资源.h

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”)
时,我得到了(从较大的类型转换为较小的类型)。事实证明,编译器警告实际上是有用的!