VC6.0源码中让外部DLL作为资源文件并调用

shaogent 2013-01-29 11:42:29
1.自己想写一个exe程序,需要使用一些外部的dll,但是客户下载的时候经常将DLL弄丢或者位置放错,所以想将DLL植入exe中,谢谢。不使用exe捆绑->杀毒软件原因。VC代码为非托管。
...全文
807 32 点赞 打赏 收藏 举报
写回复
32 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zch6163608 2013-04-15
引用 25 楼 ylgm44 的回复:
不是目录,是dll名字
还有这边用dll名字或者目录加名字都可以~
  • 打赏
  • 举报
回复
zch6163608 2013-04-15
引用 25 楼 ylgm44 的回复:
不是目录,是dll名字
找到问题了。。。之前无效是因为我只改了GetModuleHandle, 没发现后面的SizeofResource也要对应的修改。。。现在可以在demo可以不用加资源了~~ 不过封装的方法还是不行。。 要在360关闭的情况下编译运行~
  • 打赏
  • 举报
回复
zch6163608 2013-04-15
引用 25 楼 ylgm44 的回复:
不是目录,是dll名字
GetModuleHandle(绝对路径/dll名字) 这样用么?? 我这样用一直提示tmp.dll为无效window映像
  • 打赏
  • 举报
回复
zch6163608 2013-04-15
引用 29 楼 ylgm44 的回复:
听说去360提交软件可以通过360审查。但其他杀毒也会测出来。。实在不知道怎么整。总不能一个一个杀毒软件商提交吧。。
好像有人说加数字签名可以。。。结果加上去,,一样报毒。。
  • 打赏
  • 举报
回复
zch6163608 2013-04-15
引用 29 楼 ylgm44 的回复:
听说去360提交软件可以通过360审查。但其他杀毒也会测出来。。实在不知道怎么整。总不能一个一个杀毒软件商提交吧。。
FreeLibrary(hLib); 都返回成功了~~ 但是这里有一点不明白,为什么成功了hLib还是非空呢?~ 不过手动置为空后也删除不了。。
  • 打赏
  • 举报
回复
zch6163608 2013-04-15
引用 29 楼 ylgm44 的回复:
听说去360提交软件可以通过360审查。但其他杀毒也会测出来。。实在不知道怎么整。总不能一个一个杀毒软件商提交吧。。
好像有这么一说~~ 但是现在发现那个deletefile还是没用。。。我改成system("del dll")结果显示拒绝访问dll。。。。 临时文件删除不了、、、
  • 打赏
  • 举报
回复
ylgm44 2013-04-15
听说去360提交软件可以通过360审查。但其他杀毒也会测出来。。实在不知道怎么整。总不能一个一个杀毒软件商提交吧。。
  • 打赏
  • 举报
回复
ylgm44 2013-04-12
引用 14 楼 zch6163608 的回复:
引用 8 楼 ylgm44 的回复:我就删除了啊。。报什么消息啊。。 我知道为什么删除不了了 一、文件属性确实要改FILE_ATTRIBUTE_NORMAL 二、是不是因为动态文件还是作为资源,被项目使用中,所以无法删除?
我的代码中有一句: if (NULL != hLib) { ::FreeLibrary(hLib); } 你添加没有,必须先FreeLibrary,才能删除。
  • 打赏
  • 举报
回复
ylgm44 2013-04-12
不对,应该是这样: 第三方库:thrd.dll 创建的dll:tmp.dll 封装的dll:cap.dll 可执行程序:demo.exe cap.dll中封装了thrd.dll,同时cap.dll先生成tmp.dll,关闭程序时删除tmp.dll。demo调用cap.dll.对吗? 还是: tmp.dll中封装了thrd.dll,cap.dll先生成tmp.dll,关闭程序时删除tmp.dll。demo调用cap.dll.对吗? 我先确认一下,然后我再试试。。
  • 打赏
  • 举报
回复
ylgm44 2013-04-12
先说无法删除的问题。 按照你说的,应该是这样一个结构对吧: 第三方库:thrd.dll 创建的dll:tmp.dll 可执行程序:demo.exe tmp.dll中封装了thrd.dll,demo先生成tmp.dll,关闭程序时删除tmp.dll。 以上说明对吧。。我先确认一下,然后我再试试。。
  • 打赏
  • 举报
回复
ylgm44 2013-04-12
不是目录,是dll名字
  • 打赏
  • 举报
回复
ylgm44 2013-04-12
先用绝对路径试试,相对路径应该是demo的。。 我知道的就这一种了。。。。
  • 打赏
  • 举报
回复
zch6163608 2013-04-12
引用 21 楼 ylgm44 的回复:
引用 19 楼 zch6163608 的回复:引用 17 楼 ylgm44 的回复:引用 14 楼 zch6163608 的回复:引用 8 楼 ylgm44 的回复:我就删除了啊。。报什么消息啊。。 我知道为什么删除不了了 一、文件属性确实要改FILE_ATTRIBUTE_NORMAL 二、是不是因为动态文件还是作为资源,被项目使用中,所以无法删除? 我的……
这边的路径是指到它所在的文件目录就好了吧? 可以用相对路径吗?~如果用相对路径是相对demo的 还是相对之前封装的cap.dll的路径。。。 dll封装的话,只有这一种方法了吗? 。。。。 那就是一定会报毒了 = = 。。。。。
  • 打赏
  • 举报
回复
zch6163608 2013-04-12
引用 21 楼 ylgm44 的回复:
引用 19 楼 zch6163608 的回复:引用 17 楼 ylgm44 的回复:引用 14 楼 zch6163608 的回复:引用 8 楼 ylgm44 的回复:我就删除了啊。。报什么消息啊。。 我知道为什么删除不了了 一、文件属性确实要改FILE_ATTRIBUTE_NORMAL 二、是不是因为动态文件还是作为资源,被项目使用中,所以无法删除? 我的……
这边指的是GetModuleHandle(NULL) 中的null改成dll路径?? 这边的dll指的是tmp.dll的路径么?
  • 打赏
  • 举报
回复
ylgm44 2013-04-12
引用 19 楼 zch6163608 的回复:
引用 17 楼 ylgm44 的回复:引用 14 楼 zch6163608 的回复:引用 8 楼 ylgm44 的回复:我就删除了啊。。报什么消息啊。。 我知道为什么删除不了了 一、文件属性确实要改FILE_ATTRIBUTE_NORMAL 二、是不是因为动态文件还是作为资源,被项目使用中,所以无法删除? 我的代码中有一句: if (NULL !=……
exe中不需要吧thrd.dll作为资源。。之所以提示资源无效,是因为你在tmp.dll中load资源的时候,调用GetModuleHandle(NULL)这个函数,传递参数为NULL,实际上得到了exe的Module。你需要得到dll的module才行,参数传递为dll的路径。 对于360问题,确实不知道该怎么解决。
  • 打赏
  • 举报
回复
zch6163608 2013-04-12
引用 17 楼 ylgm44 的回复:
引用 14 楼 zch6163608 的回复:引用 8 楼 ylgm44 的回复:我就删除了啊。。报什么消息啊。。 我知道为什么删除不了了 一、文件属性确实要改FILE_ATTRIBUTE_NORMAL 二、是不是因为动态文件还是作为资源,被项目使用中,所以无法删除? 我的代码中有一句: if (NULL != hLib) { ……
今天发现用资源封装thrd.dll,生成的cap.dll,360也会报。。。请问还有没有其他的办法来做这个操作。。。。简而言之 就是有没有办法将第三方thrd.dll封装到新的dll中~~~~然后直接就可以使用第三方的接口,对应工程中就可以不用加第三方库
  • 打赏
  • 举报
回复
zch6163608 2013-04-12
引用 17 楼 ylgm44 的回复:
引用 14 楼 zch6163608 的回复:引用 8 楼 ylgm44 的回复:我就删除了啊。。报什么消息啊。。 我知道为什么删除不了了 一、文件属性确实要改FILE_ATTRIBUTE_NORMAL 二、是不是因为动态文件还是作为资源,被项目使用中,所以无法删除? 我的代码中有一句: if (NULL != hLib) { ……
这里其实有一个疑惑,按照我这种调用方法的话,就是最后的demo.exe里面是不是也要加上thrd.dll作为资源? 要不在调用cap.dll会提示资源无效。。 这样的话等于说在封装cap.dll和demo.exe是都要加资源??
  • 打赏
  • 举报
回复
zch6163608 2013-04-12
引用 16 楼 ylgm44 的回复:
不对,应该是这样: 第三方库:thrd.dll 创建的dll:tmp.dll 封装的dll:cap.dll 可执行程序:demo.exe cap.dll中封装了thrd.dll,同时cap.dll先生成tmp.dll,关闭程序时删除tmp.dll。demo调用cap.dll.对吗? 还是: tmp.dll中封装了thrd.dll,cap.dll先生成……
是这样的 第三方库 thrd.dll 动态创建的 tmp.dll(这边其实就是将thrd.dll作为资源,所以tmp和thrd内容一样) 封装的cap.dll 可执行demo.exe中调用cap.dll,删除的命令写在cap.dll中,但是最后却无法生效~有做FreeLibrary操作
  • 打赏
  • 举报
回复
ylgm44 2013-04-11
引用 9 楼 zch6163608 的回复:
引用 8 楼 ylgm44 的回复:我就删除了啊。。报什么消息啊。。 我用了DeleteFile(_T("test.dll")) 没报错。。。但是文件还在、、、、
这个我还真不知道为什么。。我的是删除了。 你在生成test.dll的地方,手动创建一个文件,在程序中删除test.dll的地方,加一行代码,删除手动添加的文件(代码加在删除test.dll代码之前,防止删除这个dll出错时,不再执行下面的代码),看看能不能删除,如果能删除,就是dll被占用后者其他问题(文件类型/360问题等等),另外关闭360试一下,看看是不是360问题。
引用 10 楼 zch6163608 的回复:
引用 8 楼 ylgm44 的回复:我就删除了啊。。报什么消息啊。。 还有一个问题。。我用这个方法封装引用,结果生成的exe 360会报木马。。。怎么解决呢?~
你是怎么封装的,封装成exe估计360肯定报,封装成一个类,应该可以过吧。像这种自己生成可执行文件(包括dll),然后自己再调用,本身就有点类似木马,360报是可能的。网上有很多类似的问题,都是360的祸。你先试试,不行再想办法。
  • 打赏
  • 举报
回复
zch6163608 2013-04-11
引用 8 楼 ylgm44 的回复:
我就删除了啊。。报什么消息啊。。
我知道为什么删除不了了 一、文件属性确实要改FILE_ATTRIBUTE_NORMAL 二、是不是因为动态文件还是作为资源,被项目使用中,所以无法删除?
  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
C++ 语言
加入

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2013-01-29 11:42
社区公告
暂无公告