请问,是否有办法将外部exe打包成资源文件?

yunok 2003-12-31 09:28:29
我想把一个外部exe打包成资源文件,然后用VB来调用该资源文件,请问有没有可能来实现?
我见过打包ocx的,同样的方法是不能包含在exe上的
...全文
100 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinweihong 2004-01-02
  • 打赏
  • 举报
回复
我先申明,这篇文章我不知道是从那看到的了,至于作者是谁更不清楚,在这里只是让大家都了解些东西而已。。。。。。。。。。
从程序中生成Exe文件
这篇文章要讨论的是在一个VB程序中如何产生出另一个Exe文件。
  要实现这个目的,必须符合以下几个条件:
    第一、编写这样的程序时,具备欲生成的Exe文件
    第二、事先知道欲生成的Exe文件大小
  其实这两个条件可以说不是条件,但确实很重要。
  为了叙说方便,将发行的程序称作APP-1.Exe,要生成的文件叫APP-2.Exe,以下是具体步骤:

    第一步,准备好APP-2.Exe,这里我使用VB写了一个什么都不做程序,编译成APP-2.Exe。
    第二步,右键单击单击APP-2.Exe,选择属性,记下文件大小。注意,应记下以字节为单位的具体数字,而不是多少k。
    这样就具备了前边说的两个条件。
    第三步,新建工程APP1,新建资源文件加入工程,在资源文件编辑器中添加自定义资源(CUSTOM),资源号使用默认的101。值得注意的是,每个资源号对应的资源项对资源大小的要求是有限制的,我记得时64K,因此如果APP-2.Exe的大小如果大于这个数的话,就要麻烦一些。如果是这样,我们的写另一个程序,把APP-2.Exe一个字节一个字节的读出来,每64K生成一个文件,然后再把这些文件分别写道资源文件的101、102......资源项中,代码也要作相应的修改。

    第四步,为APP-1.Exe编写代码,使其读取资源文件的数据,生成APP-1.Exe。

  代码如下:

  Private Const FILESIZEOFAPP2 = 20480 '我生成的APP-2.Exe大小是20480Byte
  Private Sub cmdOK_Click() '单击按钮cmdOK运行代码
    Dim APP2() As Byte 'APP2是个Btye类型和数组
    Dim Counter As Long
    APP2 = LoadResData(101, "CUSTOM") '将自定义资源中101号资源读入数组
    '注意,微软的帮助中对加载定义资源的说明有误,硬是资源标识为"CUSTOM"而非数字
    If Dir(App.Path & "\APP-2.Exe") <> "" Then '第一次按cmdOK有效
      MsgBox App.Path & "\APP-2.Exe 已经存在!"
      Exit Sub
    End If
    Open App.Path & "\APP-2.exe" For Binary As #1 '以二进制方式写(生成)APP-2.Exe到APP-1.Exe所在的目录
      For Counter = 0 To FILESIZEOFAPP2 - 1 '注意因为从0 Byte开始因此以文件大小 - 1Byte 为终
        Put #1, , APP2(Counter)
      Next Counter
    Close #1
    Shell App.Path & "\APP-2.Exe", vbNormalFocus '运行刚生成的APP-2.Exe
    Unload Me
  End Sub
egg0817 2004-01-02
  • 打赏
  • 举报
回复
没有这么麻烦啊

1.用vb6.0的资源编辑器加载你要的那个exe文件.(不会的话问我)
2.添加一下代码
Public Function SaveFileFromRes(vntresourceId As Variant, sTYPE As String, sfilename As String) As Boolean
Dim bytimage() As Byte
Dim ifilenum As Integer
On Error GoTo SaveFileFromRes_err
SaveFileFromRes = True
bytimage = LoadResData(vntresourceId, sTYPE)
ifilenum = FreeFile
Open sfilename For Binary As ifilenum
Put #ifilenum, , bytimage
Close ifilenum
SaveFileFromRes_err:
Exit Function
SaveFileFromRes = False: Exit Function
End Function

3.要调用那个exe文件,只需
Private Sub Command1_Click()
SaveFileFromRes 101, "CUSTOM", "c:\test.exe"
shell "c:\test.exe"
End Sub


对于第1步:
依次点击:"外接程序"--"外接程序管理器"--"vb 6 资源编辑器"后加载

运行 "vb 资源编辑器"--单击倒数第二个按钮,在打开的对话框中选择你的程序 就可以了

^_^ 楼主结贴吧

rainstormmaster 2004-01-02
  • 打赏
  • 举报
回复
http://www.csdn.net/Develop/article/23/23062.shtm
yunok 2003-12-31
  • 打赏
  • 举报
回复
jhzhou882(狂刀侠) 好像不太可行啊。您试了吗?
jhzhou882 2003-12-31
  • 打赏
  • 举报
回复
可以的
把EXE文件选上 把目录选到安装目录下.
调用的时候用 APP.PATH &".EXE"
luchai88 2003-12-31
  • 打赏
  • 举报
回复
lsq004垃圾一个,斑竹呢?还不删贴子!!!!
rainivy 2003-12-31
  • 打赏
  • 举报
回复
樓上的介紹什麼拉圾,版主在哪,刪貼呀....
lsq004 2003-12-31
  • 打赏
  • 举报
回复
这里有答案 lsq004.myrice.com
LanceJin 2003-12-31
  • 打赏
  • 举报
回复
关注,有结果要公布哦
yunok 2003-12-31
  • 打赏
  • 举报
回复
ding

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧