VB运行时怎么加载存在自身路径下的控件文件???????????????请多多帮助!谢谢!!

比如我在程序路径下有commondialog的文件,怎样在程序运行的用代码加载??... 比如我在程序路径下有commondialog的文件,怎样在程序运行的用代码加载?? 展开
 我来答
xzqsr2010
2013-02-06 · TA获得超过430个赞
知道小有建树答主
回答量:407
采纳率:0%
帮助的人:271万
展开全部

按照下面的方法做,把里面的东西换成你要用的控件有关的信息,做完后在工程资源管理器窗口里右键点属性,把启动窗口设为 Sub Main


如何在VB中加载OCX文件(或其他控件文件)

近来写的不少文件都是用到系统的ocx文件,但是发现很多xp的精简系统中居然都没有这些ocx文件。搞得我的程序在许多人的机器上无法运行,这样我就找到如下的方法来解决这个问题。即:在exe文件中将ocx作为资源文件,外部有则不理,外部没有则自动生成。

 

     做法是,将第三方控件以自定义资源文件方式保存在程序中,程序运行之后使用控件之前将所用到的控件生成到该程序目录下,完成控件从可执行文件中的金蝉脱壳。

  具体做法如下:

  第一步:将要用到的控件拷贝到当前工程目录下,右键单击该控件,选择属性,记下文件大小。注意,应记下以字节为单位的具体数字,而不是多少K,以备编程使用。

  第二步:引用并正常使用该控件。

  第三步:新建资源文件加入工程,在资源文件编辑器中添加所使用的第三方控件为自定义资源(CUSTOM),资源号使用默认的101。如果使用了多个控件则分别添加到资源文件的101、102......资源项中,脱壳代码也要作相应的修改。

  第四步:编写控件脱壳代码,使其读取资源文件的数据,在程序当前目录下生成控件。

说一下如何加载资源吧:

            外接程序->外接程序管理器->VB 6 ResourceEditor   加载->在工具栏里会多一个按钮,点击它。

        然后就如下面的图,点击红色圆圈部分,就可以加载custom 资源了。

 

 

代码如下:

Private Const OCXSIZE = 198456 '欲生成的控件大小是198456Byte,名字为MCI32.OCX

Sub Main()

  Dim Ocx() As Byte 'OCX是个BTye类型的数组

  Dim Counter As Long

  Ocx = LoadResData(101, "CUSTOM") '将自定义资源中101号资源读入数组OCX

  '注意,微软的帮助中对加载自定义资源的说明有错误,自定义资源标识为"CUSTOM"而不是帮助所说的数字10

  If Right(App.Path, 1) = "($%$43%^#ASD#2@$#f$%^)" Then '读取程序所在路径,判断是否为根目录并分别处理

    '程序在根目录下

    If Dir(App.Path & "MCI32.OCX") = ""

Then '程序路径下有无控件,无则生成控件

      '以二进制方式写(生成)控件(CoolToolBar.ocx)到主程序所在的目录

      Open App.Path & "MCI32.OCX" For

Binary As #1

      For Counter = 0 To OCXSIZE - 1 '注意因为从0 Byte开始因此以文件大小 - 1Byte 为终值

        Put #1, , Ocx(Counter)

      Next Counter

      Close #1

    End If

  Else

    '程序不在根目录下

    If Dir(App.Path & "\MCI32.OCX") = ""

Then '程序路径下有无控件,无则生成控件

      '以二进制方式写(生成)控件(CoolToolBar.ocx)到主程序所在的目录

      Open App.Path & "\MCI32.OCX" For

Binary As #1

      For Counter = 0 To OCXSIZE - 1 '注意因为从0 Byte开始因此以文件大小 - 1Byte 为终值

        Put #1, , Ocx(Counter)

      Next Counter

      Close #1

    End If

  End If

  Form1.Visible = True '主程序所用控件已经生成,显示主窗体,进入主程序。

End Sub

  注意:将以上代码作为一个模块添加到工程中,并在工程-工程属性设置中将启动对象选为Sub Main,即上面的脱壳代码。然后编译生成EXE文件,将该EXE文件拷贝到其他没有安装所用控件的计算机上运行一下看看是否实现了控件携带之金蝉脱壳。如果是那么OK!以上为使用一个控件的情况,使用多个控件方法基本相同,不在赘述。

popmoon
2013-02-05 · TA获得超过9993个赞
知道大有可为答主
回答量:4464
采纳率:30%
帮助的人:3520万
展开全部
GCommonDialog.cls 是这个吗,要写到程序里,然后调用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风雪剑无痕
2013-02-05 · TA获得超过1253个赞
知道大有可为答主
回答量:1691
采纳率:100%
帮助的人:1674万
展开全部
Shell "cmd /c regsvr32 /s commondialog", vbHide
来自:求助得到的回答
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9b9910e
2013-02-05 · TA获得超过397个赞
知道小有建树答主
回答量:721
采纳率:0%
帮助的人:446万
展开全部
去网上查查关于【反射】Reflection的例子。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式