MFC编程如何把dll封装入exe中 5
dll是我找到来现成的,没有源代码..把程序交给别人的时候不想让对方知道我用过这个dll..请问有什么办法把这个dll封装入exe里,这样我交给别人的就单独是一个exe文...
dll是我找到来现成的,没有源代码..
把程序交给别人的时候不想让对方知道我用过这个dll..
请问有什么办法把这个dll封装入exe里,这样我交给别人的就单独是一个exe文件.. 展开
把程序交给别人的时候不想让对方知道我用过这个dll..
请问有什么办法把这个dll封装入exe里,这样我交给别人的就单独是一个exe文件.. 展开
5个回答
展开全部
可以把dll以二进制形式写入到exe文件后面(exe允许后边添加任意长度数据 不影响程序的运行)长度为dll大小 在程序初始化的中读取自身文件后偏移dll大小的数据 然后创建这个dll 再loadlibrary 程序退出前deletefile把dll删除 如果不想被发现的话 还可以把dll的属性设置为隐藏或者直接将dll写入到windows目录下
追问
请问具体该怎么做呢?或者给个教程链接也成..多谢!
追答
这个简单啊 给你具体说说吧
你先在程序用dll的地方打开文件 就是把自己打开 路径是自己的用 GetModule FileName(具体用法上网上查查)然后打开文件 seek到文件末尾 再读取文件 长度就是dll的大小 这个你查看一下dll的属于就知道了 现在程序编译好 再写一个程序 这个程序负责将dll写入到你原来那个程序后边 这个更简单 打开exe文件(以ab+方式) 然后在打开dll文件 读取dll全部数据到exe中 此时的exe就是你想要的了
展开全部
具体怎么加入、释放资源这个就不必多说了吧
加入资源:Insert-Resource-Import
要求填入类型名称,随便填个即可,比如“EXEANDDLL”
释放资源:
////////////////////////////////////////////
// 加载资源、生成文件
//定位我们的自定义资源,这里因为我们是从本模块定位资源,所以将句柄简单地置为NULL即可
HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(IDR_XXXXXX),
TEXT("EXEANDDLL"));//IDR_XXXXXX就是你刚才导入的a.exe或b.dll的ID了
if (NULL == hRsrc)
return FALSE;
//获取资源的大小
DWORD dwSize = SizeofResource(NULL, hRsrc);
if (0 == dwSize)
return FALSE;
//加载资源
HGLOBAL gl = LoadResource(NULL, hRsrc);
if (NULL == gl)
return FALSE;
//锁定资源
LPVOID lp = LockResource(gl);
if (NULL == lp)
return FALSE;
CString filename="a.exe";//保存的临时文件名
// CREATE_ALWAYS为不管文件存不存在都产生新文件。
HANDLE fp= CreateFile(filename
,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
DWORD a;
//sizeofResource 得到资源文件的大小
if (!WriteFile (fp,lp,dwSize,&a,NULL))
return false;
CloseHandle (fp);//关闭句柄
FreeResource (gl);//释放内存
加入资源:Insert-Resource-Import
要求填入类型名称,随便填个即可,比如“EXEANDDLL”
释放资源:
////////////////////////////////////////////
// 加载资源、生成文件
//定位我们的自定义资源,这里因为我们是从本模块定位资源,所以将句柄简单地置为NULL即可
HRSRC hRsrc = FindResource(NULL, MAKEINTRESOURCE(IDR_XXXXXX),
TEXT("EXEANDDLL"));//IDR_XXXXXX就是你刚才导入的a.exe或b.dll的ID了
if (NULL == hRsrc)
return FALSE;
//获取资源的大小
DWORD dwSize = SizeofResource(NULL, hRsrc);
if (0 == dwSize)
return FALSE;
//加载资源
HGLOBAL gl = LoadResource(NULL, hRsrc);
if (NULL == gl)
return FALSE;
//锁定资源
LPVOID lp = LockResource(gl);
if (NULL == lp)
return FALSE;
CString filename="a.exe";//保存的临时文件名
// CREATE_ALWAYS为不管文件存不存在都产生新文件。
HANDLE fp= CreateFile(filename
,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);
DWORD a;
//sizeofResource 得到资源文件的大小
if (!WriteFile (fp,lp,dwSize,&a,NULL))
return false;
CloseHandle (fp);//关闭句柄
FreeResource (gl);//释放内存
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-07-23 · 知道合伙人软件行家
关注
展开全部
exe要想讲dll 直接编译进去,只需要dll 是被静态编译生成的就行了。
dll分动动态和静态编译,动态换言之就是程序在运行时才查找所需的dlI,然后将其加载到内存中;静态在编译时就会将代码加入到exe中,运行时就不再需要该dll文件了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有个软件叫MoleBox
专门用来干这种事的
你可以拿来试一下
专门用来干这种事的
你可以拿来试一下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-08-26
展开全部
dll没有源代码的话不能用吧,你不知道里面的接口,怎么调用它呢。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询