Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.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++ 快速导出嵌入式数据的方法_C++_Winapi_Embedded Resource_Copying - Fatal编程技术网

C++ 快速导出嵌入式数据的方法

C++ 快速导出嵌入式数据的方法,c++,winapi,embedded-resource,copying,C++,Winapi,Embedded Resource,Copying,出于某些原因,我正在使用这里描述的方法: 它从嵌入文件的第一个字节开始,依次经过4.234.925个字节!大约需要40秒才能完成 是否有其他方法将嵌入式文件复制到硬盘?(这里我可能错了,但我认为嵌入的文件是从内存中读取的) 谢谢。就像那个人说的那样,每次调用WriteFile都要写更多的文件(或整个文件)。每个字节的WriteFile调用速度会慢得离谱是的。一旦知道嵌入的exe的位置和大小,就可以在一次写入中完成 LPBYTE pbExtract; // the pointer to the d

出于某些原因,我正在使用这里描述的方法:

它从嵌入文件的第一个字节开始,依次经过4.234.925个字节!大约需要40秒才能完成

是否有其他方法将嵌入式文件复制到硬盘?(这里我可能错了,但我认为嵌入的文件是从内存中读取的)


谢谢。

就像那个人说的那样,每次调用WriteFile都要写更多的文件(或整个文件)。每个字节的WriteFile调用速度会慢得离谱是的。

一旦知道嵌入的exe的位置和大小,就可以在一次写入中完成

LPBYTE pbExtract; // the pointer to the data to extract
UINT   cbExtract; // the size of the data to extract.

HANDLE hf;
hf = CreateFile("filename.exe",          // file name
                GENERIC_WRITE,           // open for writing 
                0,                       // no share
                NULL,                    // no security 
                CREATE_ALWAYS,           // overwrite existing
                FILE_ATTRIBUTE_NORMAL,   // normal file 
                NULL);                   // no template 

if (INVALID_HANDLE_VALUE != hf)
{
   DWORD cbWrote;
   WriteFile(hf, pbExtract, cbExtract, &cbWrote, NULL);
   CloseHandle(hf);
}

有趣!我以前在C#中尝试过这样做,通过复制嵌入式资源(这是一个本机非托管DLL),并通过内存映射资源并使内存映射文件可执行,将其加载到进程空间中,然后调用失败的函数。。我自己还在为那个挑战而奋斗!为什么不使用“WriteFile”函数,它可以获取一定大小的任意缓冲区,并在一个foop中写入。