【插件开发】VC6.0要求将EXE改成DLL运行

发布于:2022-11-29 ⋅ 阅读:(291) ⋅ 点赞:(0)

今天遇到特殊的需求,就是要求将EXE改成DLL运行,一开始遇到这个需求,是要把整个EXE工程改了。其实还有一种比较方法就是 将EXE直接嵌入到DLL的资源里面即可。然后调用方 直接用函数 LoadLibraryA 函数加载即可运行dll里面的exe 或 dat文件.具体代码如下。


 

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <process.h>
#include "resource.h"  // 这个资源头文件 是在VC6.0  添加资源的时候自动产生

int  __stdcall RunPlug( )  
{
    WinExec("gdi.dat",SW_NORMAL);  
    return 1;
}

BOOL  __stdcall FreeMyResource(UINT uiResouceName, char* lpszResourceType, char* lpszSaveFileName )    //加法
{

HRSRC hRsrc = ::FindResourceA(GetModuleHandleA("gdi.dll"), MAKEINTRESOURCE(uiResouceName), lpszResourceType);
    LPTSTR szBuffer = new TCHAR[1024];//这里是定义缓冲区大小
 
    if (hRsrc == NULL)
    {
//    ::MessageBoxA(NULL, "   1 FindResourceA 函数调用失败 ", "x提示", MB_OK);
        return FALSE;
    }
    DWORD dwSize = ::SizeofResource(GetModuleHandleA("gdi.dll"), hRsrc);
    if (0 >= dwSize)
    {
//    ::MessageBoxA(NULL, "   2 SizeofResource 函数调用失败 ", "x提示", MB_OK);
        return FALSE;
    }
 
    HGLOBAL hGlobal = ::LoadResource(GetModuleHandleA("gdi.dll"), hRsrc);
    if (NULL == hGlobal)
    {
    //::MessageBoxA(NULL, "   3 LockResource 函数调用失败 ", "x提示", MB_OK);
        return FALSE;
    }
 
    LPVOID lpVoid = ::LockResource(hGlobal);
    if (NULL == lpVoid)
    {
//    ::MessageBoxA(NULL, "   4 LockResource 函数调用失败 ", "x提示", MB_OK);
        return FALSE;
    }
 
 
    FILE* fp = fopen( lpszSaveFileName, "wb+");
    
    if (NULL == fp)
    {
//    ::MessageBoxA(NULL, "  5  fp打开文件错误 ", "x提示", MB_OK);
        return FALSE;
    }
    fwrite(lpVoid, sizeof(char), dwSize, fp);
    fclose(fp);
   return TRUE;
}


BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved)
{
    if ( dwReason== DLL_PROCESS_ATTACH ) //本DLL被加载后即释放出资源里面的二进制文件
    {
        char szSaveName[MAX_PATH] = "gdi.dat";
          BOOL bRet = FreeMyResource(IDR_DAT1, "DAT", szSaveName);  // 释放EXE文件 gdi.dat
        if (bRet == TRUE )
        {
               RunPlug() ; //执行这个二进制文件
        }
    }
     
    return TRUE;
}

// 有需要各种小工具插件开发的可以联系我Q 1016058890

完整VC6工程下载 https://download.csdn.net/download/i735740559/86742146

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到