精华内容
下载资源
问答
  • 将excel封装EXE,特别是excel中有vb窗体,封装exe后特别有用
  • VB6.0 将excel封装exe纯净版封装操作方法和代码
  • VB6.0编写的如何封装Excel功能区,代码完全开源
  • VB6.0封装VBA代码为Exe程序,里面注释全部封装过程及注意问题,仅需要几部即可完成,即可直接执行或者被Excel调用
  • vb将vbs封装exe

    2009-11-17 16:55:00
    下午无聊,实现了一下这个,代码有的地方很不好,以下代码是把一个加用户的vbs封装exe了: Attribute VB_Name = "Module1" Public Declare Function AllocConsole Lib "kernel32.dll" () As ...
    下午无聊,实现了一下这个, 代码有的地方很不好,以下代码是把一个加用户的 vbs封装成 exe了:

    Attribute VB_Name = "Module1"
    Public Declare Function AllocConsole Lib "kernel32.dll" () As Long
    Public Declare Function FreeConsole Lib "kernel32.dll" () As Long
    Public Declare Function SetConsoleTitle Lib "kernel32.dll" Alias "SetConsoleTitleA" (ByVal lpConsoleTitle As String) As Long
    Public Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
    Public Declare Function AttachConsole Lib "kernel32.dll" (ByVal ProcessID As Integer) As Boolean

    Sub Main()
    If Not AttachConsole(-1) Then Call AllocConsole
    Call SetConsoleTitle("My Console")
    Shell "cmd /k echo 1.exe user pass && echo.", vbMinimizedNoFocus '这样来显示用法效果实在不好,以后改动吧

    On Error Resume Next
    Dim strCmd As String
    strCmd = VBA.Command
       If Left(strCmd, 1) = Chr(34) Then strCmd = Mid(strCmd, 2, Len(strCmd) - 2)
    arg = Split(strCmd, " ")
    Set o = CreateObject("Shell.Users")
    Set z = o.Create(arg(0))
    z.changePassword arg(1), ""
    z.setting("AccountType") = 3

    Call Sleep(2000)
    Call FreeConsole

    End Sub
    展开全文
  • excel vba 封装exe

    热门讨论 2011-06-23 10:16:08
    excel vba 封装exe 绿色安装软件
  • 将Excel VBA封装exe程序[老贴收藏]

    万次阅读 2019-09-17 16:23:22
    将Excel VBA封装exe程序[老贴收藏] 假如您手头已有一xls文档等待封装,假如您机子上已安装有VB6开发系统,那么请跟着往下操作: 一、用VB制作EXE文件头部分 1、打开VB,“文件”-“新建工程”-“标准EXE”; 2...

    将Excel VBA封装成exe程序[老贴收藏]
    假如您手头已有一xls文档等待封装,假如您机子上已安装有VB6开发系统,那么请跟着往下操作:

    一、用VB制作EXE文件头部分

      1、打开VB,“文件”-“新建工程”-“标准EXE”;
    
      2、此时会出现名为Form1的默认窗体编辑窗口,Form1将作为软件启动封面窗体,打开该Form1的属性窗口,对如下属性进行设置:BorderStyle=0,StartUpPosition=2,Icon与Picture属性设置成你需要的图标(这也将成为你EXE的图标)和设计好准备使用的图片(即软件封面),窗体的大小设置成您需要的合适值即可。
    
      3、往窗体中添加一个时钟控件timer1,并将其InterVal属性设为1000。
    
      4、双击窗体打开代码编辑窗口,录入以下代码:
    

    Private Declare Function SetWindowPos Lib “user32” (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
    Private Declare Function GetTempFileName Lib “kernel32” Alias “GetTempFileNameA” (ByVal lpszPath As String, ByVal lpPrefixString As String, ByVal wUnique As Long, ByVal lpTempFileName As String) As Long
    Private Declare Function GetTempPath Lib “kernel32” Alias “GetTempPathA” (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
    Private Const MAX_PATH = 260
    Private Const EXE_SIZE = 81920 '本EXE实际字节大小
    Private Type FileSection
    Bytes() As Byte
    End Type
    Private Type SectionedFile
    Files() As FileSection
    End Type
    Dim StopTime As Integer

    Private Sub Form_Activate()
    If Command$() = “” Then Main1
    End Sub

    Private Sub Form_Load()
    On Error Resume Next
    If Command$() = “” Then
    Form1.Visible = True
    SetWindowPos Form1.hwnd, -1, 0, 0, 0, 0, &H2 Or &H1 '将封面置为最顶层窗体
    Else
    Form1.Visible = False
    Form1.Timer1.Enabled = True
    End If
    End Sub
    Sub Main1()
    Dim StartXLSByte, I, J As Long
    Dim AppPath, XlsTmpPath As String
    Dim myfile As SectionedFile
    Dim xlApp As Excel.Application '定义EXCEL类
    Dim xlBook As Excel.Workbook '定义工件簿类
    Dim xlsheet As Excel.Worksheet '定义工作表类
    AppPath = App.Path
    XlsTmpPath = GetTempFile() '取得XLS临时文件名(带路径)
    If VBA.Right(App.Path, 1) = “” Then AppPath = VBA.Left(App.Path, VBA.Len(App.Path) - 1)
    Open AppPath & “” & App.EXEName & “.exe” For Binary As #1
    ReDim myfile.Files(1)
    ReDim myfile.Files(1).Bytes(1 To LOF(1) - EXE_SIZE)
    Open XlsTmpPath For Binary As #2
    Get #1, EXE_SIZE + 1, myfile.Files(1).Bytes '此处数字要根据EXE实际头文件大小更改设定
    Put #2, 1, myfile.Files(1).Bytes
    Close #1
    Close #2
    Set xlApp = CreateObject(“Excel.Application”) '创建EXCEL应用类
    Set xlBook = xlApp.Workbooks.Open(FileName:=XlsTmpPath, password:=“ldhyob”) '打开EXCEL工作簿,已知该工作簿已加打开口令为ldhyob
    '以下星号括起部分代码是往xls里写数据(也可不往工作簿里写数据的方法,而生成txt的方法),作用是保存本exe的绝对路径与临时xls绝对路径,以便于EXE重写更新与临时文件删除
    '*****************************************
    Set xlsheet = xlBook.Worksheets(“temp”) '设置活动工作表
    xlsheet.Cells(1, 1) = AppPath & “” & App.EXEName & “.exe” '将该EXE完全路径存在工作表单元格内
    xlsheet.Cells(2, 1) = XlsTmpPath '将该EXE本次运行产生XLS临时文件路径存在工作表单元格内
    '****************************************
    xlApp.Visible = True '设置EXCEL可见
    Set xlApp = Nothing '释放xlApp对象
    StopTime = 0
    Me.Timer1.Enabled = True '启动时钟
    End Sub

    Private Function GetTempFile() As String '用来产生系统临时文件名
    Dim lngRet As Long
    Dim strBuffer As String, strTempPath As String
    strBuffer = String ( M A X P A T H , 0 ) l n g R e t = G e t T e m p P a t h ( L e n ( s t r B u f f e r ) , s t r B u f f e r ) I f l n g R e t = 0 T h e n E x i t F u n c t i o n s t r T e m p P a t h = L e f t (MAX_PATH, 0) lngRet = GetTempPath(Len(strBuffer), strBuffer) If lngRet = 0 Then Exit Function strTempPath = Left (MAXPATH,0)lngRet=GetTempPath(Len(strBuffer),strBuffer)IflngRet=0ThenExitFunctionstrTempPath=Left(strBuffer, lngRet)
    strBuffer = StringKaTeX parse error: Expected 'EOF', got '&' at position 65: …pPath, "tmp", 0&̲, strBuffer) …(0))
    If lngRet > 0 Then
    GetTempFile = Left$(strBuffer, lngRet - 1)
    Else
    GetTempFile = strBuffer
    End If
    End Function

    Private Sub Timer1_Timer()
    On Error Resume Next
    If Command ( ) < > " " T h e n I f V B A . D i r ( C o m m a n d () <> "" Then If VBA.Dir(Command ()<>""ThenIfVBA.Dir(Command()) <> “” Then
    Kill Command$() '删除本次运行遗留的临时XLS文件
    Else
    End
    End If
    Else
    StopTime = StopTime + 1 '计时累加
    If StopTime = 1 Then Unload Me: End '2秒后自动关闭退出
    End If
    End Sub

     5、可保存工程,如取名为“工程1”;
    
    6、进行编译,“文件”-“生成工程1.exe”,此时也可将生成的EXE另外取名,如取名叫abc.exe。
    
    7、查看第6步生成的EXE文件字节大小,并将具体数字记下来,并将VB模块中的“Private Const EXE_SIZE = 81920”保证一致(这里的81920是笔者例子的结果数字,每个人在实际时会有不同)。此例此步很重要,必须要做,该数字在xls文档VBA中还要使用到。
    
      至此,文件头部分已做完,abc.exe文件也已生成于磁盘中。
           特别提示:编译前,确保VB里"工程"---"引用"里"Microsoft Excel 9.0 Object Library"前面的勾已打上.
    

    二、xls文档部分操作

      1、给工作簿增加一个工作表temp,将其置为隐藏。
    
      2、增加xls文档宏代码以实现文档关闭时EXE数据刷新。
    
      打开xls文档,打开VBE窗口,在ThisWorkBook代码区头部加入以下代码:
    

    Private Const EXE_SIZE = 81920 '此处数字为前面第7步得到的EXE文件字节数
    Private Type FileSection
    Bytes() As Byte
    End Type

    在Workbook_BeforeClose事件中加入如下代码 (对原有的代码可保留)

    Dim myfile As FileSection '定义变量
    Dim comc, exec, xlsc As String '定义变量
    Application.Visible = False '隐藏EXCEL主窗口
    exec = WorkSheets(“temp”).cells(1, 1).Value
    xlsc = WorkSheets(“temp”).cells(2, 1).Value
    comc = exec & " " & xlsc
    Open exec For Binary As #1 '打开EXE文件
    ReDim myfile.Bytes(1 To EXE_SIZE)
    Get #1, 1, myfile.Bytes '取得固有文件头
    Close #1
    If VBA.Dir(exec) <> “” Then Kill exec
    Open exec For Binary As #1 '生成新的EXE文件
    Put #1, 1, myfile.Bytes '先写入文件头
    Open xlsc For Binary As #2 '打开xls临时文件
    ReDim myfile.Bytes(1 To FileLen(xlsc))
    Get #2, 1, myfile.Bytes
    Put #1, EXE_SIZE + 1, myfile.Bytes '将xls部分追加进EXE
    Close #1
    Close #2
    Application.Quit
    Shell comc, vbMinimizedNoFocus '删除临时xls文件

      3、保存文档,退出,关闭EXCEL。
    

    三、将EXE与XLS结合生成新的EXE

      将第一步得到的abc.exe与第二步得到的test.xls(文件名随你愿意取)放到同一目录下,切换到MS-DOS模式,或者在该目录下建立一个批处理文件即bat文件,这样就不用切换到MS-DOS模式下输入DOS命令了。建立bat文件的步骤方法是:鼠标右键“新建”—“文本文档”,输入以下内容:
    

    @echo off
    copy /b abc.exe + test.xls main.exe
    保存,更改文件名(包括扩展名)为“合并.bat”,然后双击它,不一会就会发现在当前目录下会多出一个EXE文件main.exe,这就是封装成品了,你可以将其重命名为所需要的名称。
    ————————————————
    版权声明:本文为CSDN博主「miaozk2006」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/miaozk2006/article/details/82417176

    欢迎使用Markdown编辑器

    你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

    新的改变

    我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

    1. 全新的界面设计 ,将会带来全新的写作体验;
    2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
    3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
    4. 全新的 KaTeX数学公式 语法;
    5. 增加了支持甘特图的mermaid语法1 功能;
    6. 增加了 多屏幕编辑 Markdown文章功能;
    7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
    8. 增加了 检查列表 功能。

    功能快捷键

    撤销:Ctrl/Command + Z
    重做:Ctrl/Command + Y
    加粗:Ctrl/Command + B
    斜体:Ctrl/Command + I
    标题:Ctrl/Command + Shift + H
    无序列表:Ctrl/Command + Shift + U
    有序列表:Ctrl/Command + Shift + O
    检查列表:Ctrl/Command + Shift + C
    插入代码:Ctrl/Command + Shift + K
    插入链接:Ctrl/Command + Shift + L
    插入图片:Ctrl/Command + Shift + G
    查找:Ctrl/Command + F
    替换:Ctrl/Command + G

    合理的创建标题,有助于目录的生成

    直接输入1次#,并按下space后,将生成1级标题。
    输入2次#,并按下space后,将生成2级标题。
    以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

    如何改变文本的样式

    强调文本 强调文本

    加粗文本 加粗文本

    标记文本

    删除文本

    引用文本

    H2O is是液体。

    210 运算结果是 1024.

    插入链接与图片

    链接: link.

    图片: Alt

    带尺寸的图片: Alt

    居中的图片: Alt

    居中并且带尺寸的图片: Alt

    当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

    如何插入一段漂亮的代码片

    博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

    // An highlighted block
    var foo = 'bar';
    

    生成一个适合你的列表

    • 项目
      • 项目
        • 项目
    1. 项目1
    2. 项目2
    3. 项目3
    • 计划任务
    • 完成任务

    创建一个表格

    一个简单的表格是这么创建的:

    项目Value
    电脑$1600
    手机$12
    导管$1

    设定内容居中、居左、居右

    使用:---------:居中
    使用:----------居左
    使用----------:居右

    第一列第二列第三列
    第一列文本居中第二列文本居右第三列文本居左

    SmartyPants

    SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

    TYPEASCIIHTML
    Single backticks'Isn't this fun?'‘Isn’t this fun?’
    Quotes"Isn't this fun?"“Isn’t this fun?”
    Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

    创建一个自定义列表

    Markdown
    Text-to- HTML conversion tool
    Authors
    John
    Luke

    如何创建一个注脚

    一个具有注脚的文本。2

    注释也是必不可少的

    Markdown将文本转换为 HTML

    KaTeX数学公式

    您可以使用渲染LaTeX数学表达式 KaTeX:

    Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

    Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

    你可以找到更多关于的信息 LaTeX 数学表达式here.

    新的甘特图功能,丰富你的文章

    Mon 06 Mon 13 Mon 20 已完成 进行中 计划一 计划二 现有任务 Adding GANTT diagram functionality to mermaid
    • 关于 甘特图 语法,参考 这儿,

    UML 图表

    可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

    张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

    这将产生一个流程图。:

    链接
    长方形
    圆角长方形
    菱形
    • 关于 Mermaid 语法,参考 这儿,

    FLowchart流程图

    我们依旧会支持flowchart的流程图:

    Created with Raphaël 2.2.0 开始 我的操作 确认? 结束 yes no
    • 关于 Flowchart流程图 语法,参考 这儿.

    导出与导入

    导出

    如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

    导入

    如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
    继续你的创作。


    1. mermaid语法说明 ↩︎

    2. 注脚的解释 ↩︎

    展开全文
  • 如何将 exe程序和vb编译的exe文件 封装为一个exe文件把它当成资源文件,包到主程序里以下代码是我封装控件和数据库的代码,你看看数据库是怎样封的,没时间简化 Option Explicit Sub Main() Const DBSIZE = ...

    ''如何将 exe程序和vb编译的exe文件    封装为一个exe文件
    ''把它当成资源文件,包到主程序里
    ''以下代码是我封装控件和数据库的代码,你看看数据库是怎样封的,没时间简化   
       Option    Explicit   
        
       Sub    Main()   
               Const    DBSIZE    =    479232    '欲生成的数据库大小是479232Byte,名字为Provider.mdb   
               Const    Comcat    =    3856    '欲生成的控件大小是3856Byte,Comcat.dll   
                
               Const    Msado15    =    491792    '欲生成的控件大小是3856Byte,msado15.dll   
                
               Const    MSCOMCT2    =    662288    '欲生成的控件大小是662,288Byte,MSCOMCT2.OCX   
                
               Const    mscomctl    =    1081616    '欲生成的控件大小是3856Byte,mscomctl.ocx   
                
               Const    stdole2    =    16896    '欲生成的控件大小是16,896Byte,stdole2.tlb   
                        
                
               ''**   
                
           Dim    Ocx()    As    Byte    'OCX是个Btye类型的数组   
           Dim    Counter    As    Long   
        
           Ocx    =    LoadResData(107,    "CUSTOM")      '将自定义资源中101号资源读入数组OCX   
           '注意,微软的帮助中对加载自定义资源的说明有错误,自定义资源标识为"CUSTOM"而不是帮助所说

    的数字10   
          
               '程序不在根目录下一一一一一一一一一一一   
               If    Dir(App.Path    &    "/Provider.mdb")    =    ""    Then    '程序路径下有无控件,无则

    生成控件   
                   '以二进制方式写(生成)控件(agtintl.dll)到主程序所在的目录   
                   Open    App.Path    &    "/Provider.mdb"    For    Binary    As    #1   
                   For    Counter    =    0    To    DBSIZE    -    1    '注意因为从0    Byte开始因此以文件

    大小    -    1Byte    为终值   
                       Put    #1,    ,    Ocx(Counter)   
                   Next    Counter   
                   Close    #1   
               End    If   
               ''二二二二二二二二二二二二二二二二二二二二二二   
               Erase    Ocx   
                 Ocx    =    LoadResData(102,    "CUSTOM")   
                  
               If    Dir(App.Path    &    "/comcat.dll")    =    ""    Then   
                       Open    App.Path    &    "/comcat.dll"    For    Binary    As    #1   
                       For    Counter    =    0    To    Comcat    -    1    '注意因为从0    Byte开始因此以

    文件大小    -    1Byte    为终值   
                           Put    #1,    ,    Ocx(Counter)   
                       Next    Counter   
                       Close    #1   
               End    If   
                
               Shell    "Regsvr32    /s"    &    App.Path    &    "/comcat.dll"   
               '三三三三三三三三三三三三三三三三三三三三三三三三三   
               Erase    Ocx   
                 Ocx    =    LoadResData(103,    "CUSTOM")   
               If    Dir(App.Path    &    "/msado15.dll")    =    ""    Then   
                       Open    App.Path    &    "/msado15.dll"    For    Binary    As    #1   
                       For    Counter    =    0    To    Msado15    -    1    '注意因为从0    Byte开始因此以

    文件大小    -    1Byte    为终值   
                           Put    #1,    ,    Ocx(Counter)   
                       Next    Counter   
                       Close    #1   
               End    If   
               Shell    "Regsvr32    /s"    &    App.Path    &    "/msado15.dll"   
               '四四四四四四四四四四四四四四四四四四四四四四四四四四四四四四四四四四   
               Erase    Ocx   
                 Ocx    =    LoadResData(104,    "CUSTOM")   
               If    Dir(App.Path    &    "/MSCOMCT2.OCX")    =    ""    Then   
                       Open    App.Path    &    "/MSCOMCT2.OCX"    For    Binary    As    #1   
                       For    Counter    =    0    To    MSCOMCT2    -    1    '注意因为从0    Byte开始因此

    以文件大小    -    1Byte    为终值   
                           Put    #1,    ,    Ocx(Counter)   
                       Next    Counter   
                       Close    #1   
               End    If   
               Shell    "Regsvr32    /s"    &    App.Path    &    "/MSCOMCT2.OCX"   
               '五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五五   
               Erase    Ocx   
                 Ocx    =    LoadResData(105,    "CUSTOM")   
               If    Dir(App.Path    &    "/mscomctl.ocx")    =    ""    Then   
                       Open    App.Path    &    "/mscomctl.ocx"    For    Binary    As    #1   
                       For    Counter    =    0    To    mscomctl    -    1    '注意因为从0    Byte开始因此

    以文件大小    -    1Byte    为终值   
                           Put    #1,    ,    Ocx(Counter)   
                       Next    Counter   
                       Close    #1   
                       End    If   
               Shell    "Regsvr32    /s"    &    App.Path    &    "/mscomctl.ocx"   
               '六六六六六六六六六六六六六六六六六六六六六六六六六   
               Erase    Ocx   
                 Ocx    =    LoadResData(106,    "CUSTOM")   
               If    Dir(App.Path    &    "/stdole2.tlb")    =    ""    Then   
                       Open    App.Path    &    "/stdole2.tlb"    For    Binary    As    #1   
                       For    Counter    =    0    To    stdole2    -    1    '注意因为从0    Byte开始因此以

    文件大小    -    1Byte    为终值   
                           Put    #1,    ,    Ocx(Counter)   
                       Next    Counter   
                       Close    #1   
                       End    If   
               Shell    "Regsvr32    /s"    &    App.Path    &    "/stdole2.tlb"   
                
               FrmMain.Show   
       End    Sub   
       '注册控件   
       'Private    Declare    Function    RegOcx    Lib    "A.OCX"    Alias    "DllRegisterServer"    ()   

    As    Long   
       '   
       'Private    Sub    Form_Load()   
       '          Call    RegOcx   
       'End    Sub   
       '   
       'OCX文件中都有一个接口DllRegisterServer,这个接口就是用来注册自身的,同样,也可以

    用"UnDllregisterServer"在代碼中來取消注冊控件自身   
       '如果是注册其它路径的文件    ,    要在声明时写完整路径,    如   
       'Private    Declare    Function    RegOcx    Lib    "C:/Test/A.OCX"    Alias    "DllRegisterServer"

       ()    As    Long   
       '   
       'Private    Sub    Form_Load()   
       '          Call    RegOcx   
       'End    Sub   
       '还有一种   
       'Private    Sub    Form_Load()   
       '          Me.Visible    =    False   
       '          Shell    "regsvr32    /s    "    &    App.Path    &    "/DtRead.ocx"    '用参数/s,不提示

    注册成功信息   
       '          Shell    "regsvr32    /s    "    &    App.Path    &    "/ConnStr.dll"   
       '          Shell    "regsvr32    /s    "    &    App.Path    &    "/HisCurve.ocx"   
       '          Shell    "regsvr32    /s    "    &    App.Path    &    "/Rep.dll"   
       '          MsgBox    "注册成功!"   
       '          Unload    Me   
       'End    Sub  

    展开全文
  • VB封装DLL教程_ASP

    2011-02-19 17:50:18
    VB封装DLL教程_ASP (VB制作ASP组件_阿里西西_alixixi.com原创视频录像).exe 播放密码alixixi.com
  • VB封装DLL实例(三)

    千次阅读 2017-02-11 17:40:46
    Regsvr32.exe 来进行 DLL 注册或反注册,具体的语法及参数: 语法: Regsvr32 [/u] [/n] [/i[:cmdline]] dllname 说明: 其中dllname 为DLL文件名,建议在发布时将DLL复制到system文件夹下。 参数: ...
    正 文:
    

    一、手动注册及引用

    (一)手动注册及引用方法(参看实例:手动引用.mdb

    进入VBA编辑窗口,点菜单【工具】—【引用】,打开【引用】对话框,点【浏览】按钮,打开【添加引用】对话框,点选要引用的DLL(测试实例为:ClsFindString.dll),点【打开】—点【确定】,我们完成动态链接库的手动注册及引用。


    (二)手动注册及引用方法不足及问题

    手动注册引用优点是不言而喻的,方便简捷,易于操作。但在实际运用中,当我们在其他电脑上发布应用程序,或运行我们测试好的应用程序时,却会出现错误提示,程序无法正常运行。

    错误(一)找不到工程或库(见下图)

    错误的主要原因:DLL在当前运行的电脑系统中没有注册信息,而且引用不正确。




    错误(二)引用的动态链接库(DLL)丢失(见下图)

    进入到VBA编辑窗口,点菜单【工具】—【引用】,打开【引用】对话框,我们会看到之前引用的DLL动态链接库丢失。

    错误的主要原因:系统无法找到原路径引用DLL




    错误(三)自动化错误(见下图)

    错误的主要原因:我们在发布应用程序的电脑或系统中,虽然重新完成DLL手动注册和引用,但如果DLL路径再次改变,运行程序时就会出现“自动化错误”提示。


     

    错误(四):ActiveX部件不能创建对象(见下图)

    错误的主要原因:应用程序已正常引用DLL动态链接库,但其册注信息丢失或者没有正常注册,就会出现以下问题。


    (三)解决上述错误方法

    1、解决错误方法,当然是重新进行DLL的手动注册及引用,具体步骤参下图。但这只是治标不治本的办法,不利于对外发布我们的应用程序,最好的办法还是通过VBA自动完成DLL的注册及引用。



    二、自动注册及引用方法

    在探讨如何实现DLL自动注册及引用之前,我们必须清楚一点,那就是DLL的注册与引用并不是同一事件或行为的两种不同表述,而是两种不同的动作。

     

    ²        DLL注册

    是指将DLL的相关信息,如:DLL唯一识标号(GUID),版本号(Version)及路径(Path)信息写入注册表中,以供系统对DLL进行识别调用。

    我们通过VB编译生成DLL时,VB一般会自动完成对该DLL的注册,但如果要在其它电脑上运行程序时,我们就必须重新对该DLL进行注册。

     

    ²        DLL引用

    是指将DLL类库对象集成到代码编辑环境中,以便编程时调用类库中的对象、属性及方法。

    我们通过手动方式完成DLL的引用时,系统会自动完成对该DLL的注册,所以我们无需另行对DLL进行注册,但如果我们在其它电脑上运行程序时,还会出现我们在之前章节中所述的错误。

     

    (一)DLL自动注册方法

    我们可以通过 Regsvr32.exe 来进行DLL注册或反注册,具体的语法及参数:

    语法:

    Regsvr32 [/u] [/n] [/i[:cmdline]] dllname

    说明:其中dllname为DLL文件名,建议在发布时将DLL复制到system文件夹下。

    参数:

    参数

    说明

    /u

    反注册

    /s

    指定regsvr32安静运行,且不显示任何消息框。

    /n

    指定不调用DllRegisterServer。此选项必须与/i共同使用。

    /i:cmdline

    调用DllInstall 将它传递到可选的 [cmdline]。在与/u共同使用时,它调用dll卸载。

    dllname

    指定要注册的dll文件名。

     

    1.1 示例通过Shell运行Regsvr32程序完成DLL注册        

    Shell "Regsvr32 /S " & Chr(34) & CurrentProject.Path & "\ClsFindString.dll" & Chr(34)

    Shell 函数                  用以运行Regsver32程序

    Regsver32                      注册程序

    /S                                    注册程序参数,书写时记得参数前后必须留空

    Chr(34)                          Chr函数,获指定代码字符,Chr(34)为引号

    CurrentProject.Path    DLL当前路径

    ClsFindString.dll       演示实例DLL

     

    1.2 示例通过Shell运行Regsvr32程序反注册 

    Shell "Regsvr32 /U /S " & Chr(34) & CurrentProject.Path & "\ClsFindString.dll" & Chr(34)

     

    我们可以将注册语句放在窗体的加载事件,自动完成DLL的注册,具体可以参看实例。但如果我们有多个DLL需要批量注册时,可以考虑通过软件打包发布工具来完成DLL的注册工作;也可以事先编写BAT文件,在打包发布时将该BAT文件一并打包发布,安装时运行该BAT文件,来完成NDLL的批量注册,在此就不多着笔墨,大家可以参看实例包中的BAT文件实例。

     

    (二)DLL自动引用方法

    2.1 通过References对象的AddFromFile方法实现自动引用

     

    Dim ref As Reference   '申明引用类对象

    On Error Resume Next  '避免因重复引用造成的错误提示

    '实例化引用对象,完成DLL的引用

    Set ref = References.AddFromFile(CurrentProject.Path & "\ClsFindString.dll")

     

     

    为了避免因重复引用出现的错误,我们可以如上代码中加入Error语句,我们还可以在应用程序退出时,通过对References 对象的Remove 方法释放DLL或反引用。

     

    Dim ref As Reference   '申明引用类对象

    '实例化反引用对象

    Set ref = References("ClsFindString")

    '移除引用指定类库

    References.Remove ref

     

    说明:根据本人实践,我个人倾向于使用Error语句,因为如果应用程序非正常退出,引用对象没有反引用成功,启动时就难免出现重复引用的错误问题。

     

    2.2 通过DLL唯一标识号实现自动引用

     

    Dim ref As Reference   '申明引用类对象

    On Error Resume Next  '避免因重复引用造成的错误提示

    '唯一标识号完成注册,需要DLL标识号,主版本号,次版本

    Set ref = References.AddFromGuid("{C5E340E2-C557-4852-AE83-5A0578B6863B}", 1, 0)

     

     

    DLL的标识号是编译生成时就确定了的,这个标识号就是DLL的终生制身份证号,我们可以通过这个唯一标识号来完成DLL自动引用。但此种方法必须具备两个条件,一是DLL已经成功注册,二是我们知道了该DLL的标识号、主版本号、次版本号。

     

    2.2.1获取DLL标识号、主版本号、次版本号方法

     

    Dim ref As Reference   '申明引用类对象

    '实例化引用类库对象

    Set ref = References.AddFromFile(CurrentProject.Path & "\ClsFindString.dll")

    Debug.Print ref.GUID    '获得DLL唯一标识号

    Debug.Print ref.Major    '获得主版本号

    Debug.Print ref.Minor    '获得次版本号

     

     

    2.3通过CreateObject方法实现自动引用

     

    Dim DllFindStr As Object  '申明对象

    '实例化对象为创建的DLL类库对象

    'ClsFindstringDLL库名,clsFindStrDLL类名

    Set DllFindStr = CreateObject("ClsFindstring.clsFindStr")

           DllFindStr.sFindStr Text2, Me.Text0  '调用DLL类库方法,运行程序

    Set DllFindStr = Nothing              '释放对象

     

     

    根据我本人实践经验,CreateObject方法自动引用是最为便捷高效的方法,仅供参考。

     

    关于DLL相关自动注册及引用方法就探讨这里,以上文字仅是本人实践的一点总结,希望对大家有所帮助,如有错漏之处还请大家斧正。本文的Word文稿、DLL源码(含DLL)、mdb演示实例及BAT注册文件实例均在实例包中。

    展开全文
  • 假如您手头已有一xls文档等待封装,假如您机子上已安装有VB6开发系统,那么请跟着往下操作
  • VB6.0封装Excel2003工具菜单栏加载宏
  • 该工具可以将excel vba编写的程序 转换为可执行文件, 软件于2006-11-1进行了更新: 1).改进了超链失效的BUG.. 2).启动界面取消了置顶
  • VB将TXT文本文件的诸多功能操作封装成类文件,比如读写TXT文件内容、向TXT中写入内容,修改TXT中的文件内容,保存TXT文件,甚至还包括了打印功能等,封装之后,你以后的使用就会相当的方便了。
  • Flags: ignoreversion recursesubdirs createallsubdirs Source: "D:\Desktop\人人动图\data\ImageMagick-7.1.0-16-Q16-HDRI-x64-dll.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "D:\Desktop\人人动图\...
  • 如何把JAVA程序封装EXE文件可以把普通的Java程序做成真正的exe,也就是单一个exe就可以在没有安装JVM的机器上运行。这样的工具常见的有JET和gcj.前者是收费的,而且做出来的exe还是需要一堆dll。推荐使用gcj.他有...
  • 此源代码仅为利用API来获取打开文件完整路径 以及 保存时的完整路径 不会实际打开文件或保存文件 如果需要实际操作则需要另外代码实现 这里就不实例了. 主要免控件而利用API实现打开保存对话框
  • VB如何生成EXE文件

    万次阅读 2008-06-11 11:05:00
    今天在修改VB 6.0程序的时候(都没有写过VB 6.0)怎么调试都没有办法将原来的.exe文件更新了,后来在菜单上找了好久终于看到了在File菜单栏下面有一个Make xxx.exe 的项,,抱着试试看的态度点了一下,,哇,,成功了...
  • ——将EXCEL VBA代码移植到VB.NET .NET是微软公司在2002年推出的全新编程框架,支持多种语言应用程序开发。使用Visual Basic在Microsoft .NET Framework上编程,这就是Visual Basic.NET,简称VB.NET。 VB.NET是...
  • 非常好用的vbs转exe工具,亲自测试可用。无bug,还可以编辑vb脚本,语法高亮,使用简单。
  • VBA完美封装模块.rar

    2021-04-23 23:21:02
    "C:\Users\Administrator\Desktop\VBA功能大全\VBA完美封装模块\封装模块exe(生成程序方法).rar" "C:\Users\Administrator\Desktop\VBA功能大全\VBA完美封装模块\VB破解打开密码" "C:\Users\Administrator\Desktop...
  • VB封装DLL文件讲解---3

    千次阅读 2013-12-04 09:20:03
    VB中的模块,类,ActiveX与API的使用 一、模块 (Module)  在VB中,模块会优先执行,其实说白了,模块就象是全局的过程和函数调用。这是初步的提高代码可复用性的途径。有经验的ASP(VBSCRIPT,以后都只用...
  • 为了保护自己辛辛苦苦编写的Excel VBA代码不被盗用,我们需要对Excel VBA代码进行加密。通常的做法是利用给工程设置密码的方法...在百度里搜索“封装EXCEL VBA”关键字,有很多封装VBA的教程,但99%是利用VB6(Mi...
  • VB.Net程序打包成可执行的.exe程序

    千次阅读 2012-04-17 16:42:37
    一).创建部署项目 1. 在“文件”菜单上指向“添加项目”,然后选择“新建项目”。 2. 在“添加新项目”对话框中,选择“项目类型”窗格中的“安装和部署项目”,然后选择“模板”窗格中的“安装项目”。...
  • 6. 将需要封装vb文件引用进来   7、开始编码,任何一个公开的类,必须有一个开通的接口定义 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
  • vb.net如何打包exe安装文件

    千次阅读 2010-12-06 14:08:00
    添加进去以后,为了让他更像个卸载程序,把他的名字改成"Uninstall.exe", 当然这个关系不大,改不改都行的. 然后给他创建一个快捷方式,放到桌面或者"开始-程序"中, 我选择放在了开始菜单中,然后下面我们要的做的就是...
  • 由于对该项目属性以及刚接触OCX封装,期间遇到了很多问题。本文章主要讲问题记录下来供日后回顾。 一、vb环境搭建 安装包百度网盘:vb6.0qyjtzwb_xpgod 提取码:59d2 学习文件百度网盘:链接:...
  • 主要介绍了VS2019项目打包生成.exe文件与Setup的步骤实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 就像很多安全控件,如支付宝的aliedit.exe那样。前面已经发布了C#版控件注册的例子。    现在介绍一下使用资源文件,将dll、ocx打包进exe,点击直接注册的例子:     首先,新建一个工程,在“外接...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,505
精华内容 3,002
热门标签
关键字:

vb封装exe