1.自己想写一个exe程序,需要使用一些外部的dll,但是客户下载的时候经常将DLL弄丢或者位置放错,所以想将DLL植入exe中,谢谢。不使用exe捆绑->杀毒软件原因。VC代码为非托管。
------解决方案--------------------------------------------------------
有,但是很麻烦,不知道你元不愿意用。。
且看步骤:
1. 将外部dll作为资源文件添加到你的工程中去。我的例子中,dll名字叫testdll.dll。

2. 将资源文件读入
3. 程序启动,将资源文件写入到一个临时文件。
4. 使用这个临时文件进行操作。
// testincludedll.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include "resource.h"
using namespace std;
// 重定义接口。
typedef int (*Add)(int,int);
int _tmain(int argc, _TCHAR* argv[])
{
// 读入dll资源文件
HMODULE hThis = GetModuleHandle(NULL);
HRSRC hRes = FindResource(hThis, MAKEINTRESOURCE(IDR_DLL1), _T("dll"));
HGLOBAL hGres = LoadResource(hThis, hRes);
// 创建一个临时的dll文件。文件路径自定义。
HANDLE hFile = CreateFile(_T("test.dll"), GENERIC_WRITE, NULL, NULL, CREATE_NEW, FILE_ATTRIBUTE_HIDDEN
------解决方案--------------------------------------------------------
FILE_ATTRIBUTE_ARCHIVE, NULL);
// 将dll资源文件写入临时创建的dll文件中。
PVOID pRes = LockResource(hGres);
DWORD dwSize = SizeofResource(NULL, hRes);
DWORD dwSizeWritten = 0;
WriteFile(hFile, pRes, dwSize, &dwSizeWritten, NULL);
CloseHandle(hFile);
// 再LOAD临时dll文件,执行操作。
//本例中,dll中接口是CTestDll::Add(int,int),你需要用dump指令,查看dll的导出接口,这里是("?Add@Ctestdll@@QAEHHH@Z"),然后获取这个乱码接口。
HMODULE hLib = LoadLibrary(_T("test.dll"));
Add add = (Add) GetProcAddress(hLib, "?Add@Ctestdll@@QAEHHH@Z");
// 调用方法。
int c = add(1, 2);
cout<<c<<endl;
cin>>c;
return 0;
}
看看输出效果:
