Visual c++ 如何将EXE文件嵌入VC++;exe程序
我想隐藏我的exe文件,它是VB代码,所以我想我可以在vc++代码中隐藏它,然后我可以从vc++代码中调用它,比如run(myfile.exe)或execute(myfile.exe)。 但是我不知道我怎么能把它添加到VC++里面 您可以使用 您需要进行两个阶段的工作:Visual c++ 如何将EXE文件嵌入VC++;exe程序,visual-c++,Visual C++,我想隐藏我的exe文件,它是VB代码,所以我想我可以在vc++代码中隐藏它,然后我可以从vc++代码中调用它,比如run(myfile.exe)或execute(myfile.exe)。 但是我不知道我怎么能把它添加到VC++里面 您可以使用 您需要进行两个阶段的工作: 编译时间:在构建C++应用程序时,必须指示VStudio将(VB)可执行文件(我命名为it Real.exe)嵌入到项目输出(C++生成的可执行文件)中作为资源;(当然)为此,您需要在构建时具有VB可执行文件 运行时间:C++
- 编译时间:在构建C++应用程序时,必须指示VStudio将(VB)可执行文件(我命名为it Real.exe)嵌入到项目输出(C++生成的可执行文件)中作为资源;(当然)为此,您需要在构建时具有VB可执行文件
- res.h-只有一个包含常量定义的文件才能被其他两个文件包含。将其包含在头文件下
#定义EXE_名称“resource.EXE” #定义RES_类型_未加引号的原始 #定义RES_NAME_无引号的可执行文件
- exe.rc-这是资源文件(尽可能简化)。将其包含在资源文件下注意:尝试从VStudio编辑该文件将失败,因为资源编辑器希望该文件包含一些垃圾(默认情况下由VStudio插入)
#包括“res.h” RES\u NAME\u未加引号的RES\u TYPE\u未加引号的EXE\u NAME
- c-主代码文件。将其包含在源文件下。它从自身加载资源,将其保存到文件中,然后尝试执行该文件。我使用注释代码进行调试,不再需要了,但我还是把它放在那里了注意这只是一个例子,代码可以写得更好(例如,在错误处理、资源组织等方面),我专注于让一些东西工作起来
#包括 #包括 #包括“res.h” #定义_QUOTE(X)#X #定义报价(X)_报价(X) #定义RES_类型引号(RES_类型引号) #定义RES_NAME QUOTE(RES_NAME_unquote) /* #定义NULL_STR“NULL” BOOL回调EnumResNameProc(_In_opt_hmodulehmodule,_In_ctstrlpsztype,_In_tstrlpszname,_In_uuuptr lpram){ 如果(是_INTRESOURCE(lpszName)) printf(“ResourceName(int):[%d]\n”,lpszName); 否则{ printf(“ResourceName(str):[%s]\n”,lpszName?lpszName:NULL_str); printf(“资源地址:%08X\n”,(长)FindResource(NULL,lpszName,lpszType)); } 返回TRUE; } BOOL回调EnumResTypeProc(_In_opt_hmodulehmodule,_In_ptstrlpsztype,_In_uuptr lpram){ if(是_INTRESOURCE(lpszType)) printf(“资源类型(int):[%d]\n”,lpszType); 其他的 printf(“资源类型(str):[%s]\n”,lpszType?lpszType:NULL_str); EnumResourceNames(NULL、lpszType、EnumResNameProc、LPRAM); 返回TRUE; } //*/ int main(){ 句柄fp=NULL; HRSRC res=NULL; HGLOBAL global=NULL; char*buf=NULL; DWORD大小=0,写入=0; int-ret=-1; /* EnumResourceTypes(NULL,EnumResTypeProc,NULL); printf(“[%s][%s]\n”,RES\u名称,RES\u类型); //*/ if((res=FindResource(NULL,res_名称,res_类型))==NULL){ printf(“FindResource错误:%d\n”,GetLastError()); 返回1; } if((全局=LoadResource(NULL,res))==NULL){ printf(“加载资源错误:%d\n”,GetLastError()); 返回2; } 如果((大小=SizeofResource(NULL,res))=0){ printf(“SizeofResource错误:%d\n”,GetLastError()); 返回3; } if((buf=(char*)锁资源(全局))==NULL){ printf(“锁定资源错误:%d\n”,GetLastError()); 返回4; } 如果((fp=CreateFile(EXE\u名称、通用\u写入、0、NULL、始终创建、文件\u属性\u正常、NULL))==无效的\u句柄\u值){ printf(“CreateFile错误:%d\n”,GetLastError()); 返回5; } if(WriteFile(fp,buf,size,NULL,NULL)=FALSE){ printf(“写文件错误:%d\n”,GetLastError()); 闭合手柄(fp); 返回5; } 闭合手柄(fp); ret=系统(EXE_名称); printf(“系统返回%d\n”,ret); 返回0; }
- 编译时间:在构建C++应用程序时,必须指示VStudio将(VB)可执行文件(我命名为it Real.exe)嵌入到项目输出(C++生成的可执行文件)中作为资源;(当然)为此,您需要在构建时具有VB可执行文件
- res.h-只有一个包含常量定义的文件才能被其他两个文件包含。将其包含在头文件下
#定义EXE_名称“resource.EXE” #定义RES_类型_未加引号的原始 #定义RES_NAME_无引号的可执行文件
- exe.rc-这是资源文件(尽可能简化)。将其包含在资源文件下注意:尝试从VStudio编辑该文件将失败,因为资源编辑器希望该文件包含一些垃圾(默认情况下由VStudio插入)
#包括“res.h” RES\u NAME\u未加引号的RES\u TYPE\u未加引号的EXE\u NAME
- c-主代码文件。将其包含在源文件下。它从自身加载资源,将其保存到文件中,然后尝试执行该文件。我使用注释代码进行调试,不再需要了,但我还是把它放在那里了注意这只是一个例子,代码可以写得更好(例如,在错误处理、资源组织等方面),我专注于让一些东西工作起来
- 您可以使用
您需要进行两个阶段的工作: