当前位置:文档之家› VB--注册Dll文件

VB--注册Dll文件

VB--注册Dll文件
VB--注册Dll文件

VB--注册Dll文件

2009-04-24 13:22

如果用到编译DLL的话,在打包给别人的话,不注册DLL是运行不了的.

网上有很多方法,我把优秀的整理出来..(举例:xishuai.dll)

从简单的讲起:

如果自己的话:

regsvr32 xishuai.dll

给别人,呵呵,当然忘不了BAT了..

将下面复制到记事本,重命名为:注册组件.BAT

@echo off

regsvr32 xishuai.dll

echo 注册完成

echo

这样还要用户操作..?(哈,我们还有SHELL!!)

Private Sub Form_Load()

Shell (App.Path & "\注册组件.bat")

End Sub

这样不就OK了.(汗.MS太烦琐)

看看这个例子!:

Option Explicit

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long

Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" _

(ByVal lpLibFileName As String) As Long

Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, _

ByVal lpProcName As String) As Long

Private Declare Function CreateThread Lib "kernel32" (lpThreadAttributes As Any, _

ByVal dwStackSize As Long, ByVal lpStartAddress As Long, ByVal lParameter As Long, _

ByVal dwCreationFlags As Long, lpThreadID As Long) As Long

Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _

ByVal dwMilliseconds As Long) As Long

Private Declare Function GetExitCodeThread Lib "kernel32" (ByVal hThread As Long, _

lpExitCode As Long) As Long

Private Declare Sub ExitThread Lib "kernel32" (ByVal dwExitCode As Long) Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Dim mresult

Dim Reg As String, Success As Boolean

Public Sub RegUnReg(ByVal inFileSpec As String, Optional inHandle As String = "")

On Error Resume Next

Dim lLib As Long ' Store handle of the control library

Dim lpDLLEntryPoint As Long ' Store the address of function called Dim lpThreadID As Long ' Pointer that receives the thread identifier Dim lpExitCode As Long ' Exit code of GetExitCodeThread

Dim mThread

' Load the control DLL, i. e. map the specified DLL file into the

' address space of the calling process

lLib = LoadLibrary(inFileSpec)

If lLib = 0 Then

' e.g. file not exists or not a valid DLL file

MsgBox "Failure loading control DLL"

Exit Sub

End If

' Find and store the DLL entry point, i.e. obtain the address of the ' 揇llRegisterServer?or "DllUnregisterServer" function (to register ' or deregister the server抯 components in the registry).

'

If inHandle = "" Then

lpDLLEntryPoint = GetProcAddress(lLib, "DllRegisterServer")

ElseIf inHandle = "U" Or inHandle = "u" Then

lpDLLEntryPoint = GetProcAddress(lLib, "DllUnregisterServer")

Else

MsgBox "Unknown command handle"

Exit Sub

End If

If lpDLLEntryPoint = vbNull Or lpDLLEntryPoint = 0 Then

GoTo earlyExit1

End If

Screen.MousePointer = vbHourglass

' Create a thread to execute within the virtual address space of the calling process

mThread = CreateThread(ByVal 0, 0, ByVal lpDLLEntryPoint, ByVal 0, 0, lpThreadID)

If mThread = 0 Then

GoTo earlyExit1

End If

' Use WaitForSingleObject to check the return state (i) when the specified object

' is in the signaled state or (ii) when the time-out interval elapses. This

' function can be used to test Process and Thread.

mresult = WaitForSingleObject(mThread, 10000)

If mresult <> 0 Then

GoTo earlyExit2

End If

' We don't call the dangerous TerminateThread(); after the last handle ' to an object is closed, the object is removed from the system. CloseHandle mThread

FreeLibrary lLib

Screen.MousePointer = vbDefault

Success = True

Exit Sub

earlyExit1:

Screen.MousePointer = vbDefault

MsgBox "Registration failed in obtaining entry point or creating thread for " & inFileSpec & ".", vbCritical, "Registration Failed!"

' Decrements the reference count of loaded DLL module before leaving FreeLibrary lLib

Success = False

Exit Sub

earlyExit2:

Success = False

Screen.MousePointer = vbDefault

MsgBox "Registration failed in signaled state or time-out for " & inFileSpec & ".", vbCritical, "Registration Failed!"

FreeLibrary lLib

' Terminate the thread to free up resources that are used by the thread ' NB Calling ExitThread for an application's primary thread will cause ' the application to terminate

lpExitCode = GetExitCodeThread(mThread, lpExitCode)

ExitThread lpExitCode

End Sub

例子

RegUnReg DLL文件名(注册)

RegUnReg DLL文件名,"U" (反注册)

呵.各种方法有很多,上面的方法是很好的,在几种WINDOWS系统中测试通过.

还有:

Dim i As Double

i = Shell("regsvr32.exe C:\windows\system\xishuai.dll")

if i=0 then '注册不成功

endif

注册、反注册dll,regsvr32命令详解

这里有很多Regsvr32命令,看了后就明白了 Regsvr32命令修复系统故障实例使用过activex的人都知道,activex不注册是不能够被系统识别和使用的,一般安装程序都会自动地把它所使用的activex控件注册,但如果你拿到的一个控件需要手动注册怎么办呢?如果修改注册表那就太麻烦了,在windows 的system文件夹下有一个regsvr32.exe的程序,它就是windows自带的activex注册和反注册工具。 2000系统的regsvr32.exe在winnt\system32文件夹下; WInXP系统的regsvr32.exe在windows\system32文件夹下 regsvr32的用法为: "regsvr32 [/s] [/n] [/i(:cmdline)] dllname”。其中dllname为activex 控件文件名,建议在安装前拷贝到system文件夹下。 参数有如下意义: /u——反注册控件 /s——不管注册成功与否,均不显示提示框 /c——控制台输出 /i——跳过控件的选项进行安装(与注册不同) /n——不注册控件,此选项必须与/i选项一起使用 执行该命令的方法: 1、可以在“开始”--“运行”,调出运行的对话框,也可以使用Win+R热键,然后直接在输入栏输入即可 2、在开始--运行输入cmd,调出‘命令提示符’窗口,然后再执行regsvr32命令。 二、Regsvr32错误消息的说明 当使用 Regsvr32.exe 时,它会尝试加载该组件并调用它的 DLLSelfRegister 函数。如果此尝试成功,Regsvr32.exe 会显示一个指示成功的对话框。如果此尝试失败,Regsvr32.exe 会返回一条错误消息,其中可能会包括一个 Win32 错误代码。 以下列表介绍了 RegSvr32 错误消息和可能的原因。 Unrecognized flag:/invalid_flag 键入的标志或开关组合无效(请参阅本文中的“Regsvr32.exe 的用法”一节)。No DLL name specified. 未包括 .dll 文件名(请参阅本文中的“Regsvr32.exe 的用法”一节)。Dllname was loaded, but the DllRegisterServer or DllUnregisterServer entry point was not found. Dllname不是.dll 或.ocx 文件。例如,键入 regsvr32 wjview.exe 就会生成该错误消息。

MATLAB2014aC++代码生成,并用VC2010生成dll供VBA或VB调用使用说明

MATLAB2014a生成C++代码,并用VC2010生成dll 供VBA或VB调用使用说明 一、过程概述 1、使用VC2010生成.dll文件,测试VC程序是否正常 2、使用VBA调用VC2010生成的.dll文件,测试.dll文件调用的VBA代码是否 正常,这里使用Excel VBA主要是为了以后输入输出数据更方便。 3、使用MATLAB编写脚本程序文件,使用MATLAB CODER功能编译成c++文件。 4、VC2010集成MATLAB生成的c++代码,并编译成.dll文件 5、使用步骤1,2验证MATLAB生成的代码 二、具体实施过程描述 1、使用VC2010生成.dll文件 1.1工程建立 首先打开VS 2010--> 新建工程 --> Win32 --> Win32项目 --> 输入工程名称(MakeDll),选择好保存工程的路径-->确定。 在弹出的“应用程序设置”--> "应用成程序型" --> 选择 "DLL(D)" --> 附加选项-> 选择"空项目(E)" ---->点击"完成"进入项目工作窗口

1.2开始创建DLL 第一步: 在头"解决方案资源管理器" --> 头文件 --> 右键 -->添加新建项 ---→选择"头文件(.h)" -->输入文件名称(max) --> 点击“添加(A)”,完成max.h文件的添加。

max.h头文件中的代码为: 1. #ifndef _MAX_H 2. #define _MAX_H_ 3. __declspec(dllexport) int __stdcall fmax(int a,int b); 4. #endif 代码说明: __declspec(dllexport) 的作用是指定导出该函数为DLL函数; __stdcall是函数调用约定,表示该DLL函数被C/C++以外的语言调用; 备注:使用时需要根据实际定义的主函数返回值类型和函数名称修改低3行红色而自体标记部分内容。这里需要修改的是int数据类型,fmax(int a,int b)的函数名称和变量名称和变量的类型,或者直接从第二步的主程序中复制过来。 第二步: 在头"解决方案资源管理器" --> 源文件 --> 右键 -->添加新建项 -->选择"C++文件(.cpp)" -->输入文件名称(max) --> 添加(A) max.c源文件中的代码为:

利用RegSvr32来注册.NET COM组件

利用RegSvr32来注册.NET COM组件 ?背景 前一段时间由于业务关系,须要在一个比较旧的系统编写一个补丁。原系统使用VB编程,但如果要使用VB来实现这个补丁的内容,对于我这个并不怎么接触VB的人来说太头痛了。由于平时使用的是C#来开发,于是便想到能否用编写.NET COM组件的方式来让VB调用。想到这两三下便写了个.NET COM 测试组件,用VB测试调用测试OK。接下来就是进行后续的开发,可等到开发完成后到了补丁打包环节却傻眼了。原来的补丁打包工具在诞生时还不知道.NET为何物,所以根本没有使用RegAsm来注册.NET COM组件的功能。现在更改打补丁工具那是不现实的,可要使得VB调用.NET COM又必须使用RegAsm 注册,这下怎么办呢? ?解决方式 原打包工具是支持使用RegSvr32来注册Com组件的,忽然想到能否使用RegSvr32来注册.NET COM组件呢?印象中regsvr32在注册DLL的时候会有个CallBack函数的,于是赶紧Google找找相关资料最终解决了这个问题。主要原理是写一个代理的dll,在这个DLL的注册响应函数DllRegisterServer里调用RegAsm来注册.NET COM,同理在DllUnregisterServer里反注册。 ?代理DLL代码 stdafx.h #pragma once #include #include Register.cpp /*---------------------------------------------- 此组件主要解决C#编写的COM组件无法用RegSvr32注册的问题 原理是增加一个代理DLL,在代理DLL注册时,响应DllRegisterServer注册函数, 在响应函数中使用RegAsm来注册.Net Com组件,反注册同理。 ----------------------------------------------*/ #include "stdafx.h" #define MAX_PATH 260 //全局变量,存放注册代理dll路劲 TCHAR g_FilePath[MAX_PATH]; BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { //记录代理DLL的路径,主要是为了方便后面获取代理DLL所在目录 GetModuleFileName(hModule, g_FilePath, 255);

VB封装VBA文件

VB中的类开发 对程序员和编程爱好者来说,VB中类的技术是学习中的一个难点,在大型软件的开发过程中,模块(Moudle)、控件(Active moudle)构成了系统化、高效化的软件工程,而类的技术是控件和链接库技术的基础,因此掌握类的理论和编程方法是非常有意义的。 (一)类的基本定义和应用概述; 类是包含了方法、属性、数据成员的高级代码模块,它既在模块的范畴之内,又是一个没有图形界面的Active ocx,程序员可以象使用控件一样使用它,但却不能看到它,值得注意的是,类是不能继承的。 类能够使我们高效的完成对某一个或者某几个特定的对象的复杂操作,对象的动作就是类的方法,对象的属性就是类的属性过程。相对而言,如果编程的对象是一组事物,那么,我们采用标准模块的方式是非常合适的,在下列两种情况下,应该使用类进行代码处理: (1)创建大量性质相近的对象; (2)提高代码的封装性。 类的创建非常简单,在进行代码编写的时候,在“工程”菜单中选择“添加类模块”项目,就可以添加一个空白的类。 类文件一般以.cls作为扩展名保存。 (二)类的方法的实现; 类的方法类似于动态链接库的接口函数,它能够接受其他窗体代码的指定类型参数,并且传递到类中。一般来说类的方法是能够指定是否有返回值的。它在类中通常是一个public过程。请看下面的代码示例,它使一个密码框拒绝非字母的输入: (1)类cls的代码; Option Explicit'变量检查 Private WithEvents mytxt As TextBox '本类中的方法接受和控制一个text密码框 Dim isNUM As Boolean '类的模块级变量 Public Sub Attach(itTEXT As TextBox) '接受外部变量到mytxt中 Set mytxt = itTEXT End Sub Private Sub mytxt_KeyUp(KeyCode As Integer, Shift As Integer) isNUM = (KeyCode > = 65) And (KeyCode < = 90) '测试密码框的键盘输入是否是英文字母

java调用C#封装的dll方法

Java调用C# DLL的方法简介 By 潘伟2012-8-7 关于java调用C# 封装的DLL文件的方法 第一种:java利用JNA进行调用 思路:C#源码生成COM组件(dll和tlb文件),再利用C++进行封装,java通过JNA调用C++封装的DLL。 第二种:java利用jacob进行调用 第一种java利用JNA调用C# DLL 需安装Visual Studio 2010 ,下载jna.jar(解压放置于jdk_home/jre/lib/ext目录下)。 第一步:利用C#写COM组件 1、新建一个类库项目(文件—新建—项目—类库;命名:COMTest);//根据实际需要取文件名 2、生成.cs主文件; COMTestClass.cs

3、右键点击工程->应用程序->程序集信息->使程序集com可见,打上勾

4、右键点击工程->生成->为com Interop注册打上勾 5、设置强签名 (由于.Net下编译的COM组件并等同于C编译的COM组件,所以存在必须在运行目标机器注册的情况,对此.Net下编译的COM组件必须为程序进行签名,即强命名密钥;) 打开Visual Studio Command Prompt 输入:sn -k MyKeyFire.snk 生成MyKeyFire.snk 文件,注意路径。(.snk文件可以随意取,但.snk后缀名别忘记了) 在签名标签中选中为程序集签名,选择刚刚生成的强名称文件MyKeyFire.snk 。

6、在“解决方案资源管理器”中找到节点“Properties”打开AssemblyInfo.cs文件 如下图 7、将[assem bly: Com Visible(false)]属性改成[assem bly: Com Visible(true)] 如下图 8、编译程序,\bin\Debug目录中会生成COMTest.dll 和COMTest.tlb文件。 第二步:利用C++进行再封装 1、创建C++ DLL项目,新建项目->VC++->Win32 项目(名称:COMTest_Bridge)->下一步->应用程 序类型:DLL 2、添加类,类名:COMTest_Bridge,.h名:COMTest_Bridge.h,.cpp名:COMTest_Bridge.cpp, 然后生成项目; 3、把第一步生成的COMTest.dll 和COMTest.tlb文件放入C++项目下的Debug文件夹下。 4、注册COM组件: 4.1打开Visual Studio Command Prompt进入Debug目录,运行命令注册:

VB封装Excel_VBA成DLL技巧

VB封装Excel_VBA成DLL技巧 VB封装Excel_VBA成DLL技巧 使用VB6.0在WinXP_sp2、Excel 2000环境下制作、测试通过。一、启动VB6.0:执行:“文件夹(F)”——“新建(N)”——选择“ActiveX DLL”,如下图1:二、引用:VB 中对Excel的引用执行:“工程(P)”——“引用(N)”——选择所要引用的项目:如下图2 Excel 2000中: Microsoft Excel 9.0 Object Library Microsoft Office 9.0 Object LibraryExcel 2003中:Microsoft Excel 11.0 Object Library Microsoft Office 11.0 Object Library三、编写代码: 1、将工程默认名称“工程1”,改为“zygtest”,将类模块默认名称“Class1”, 改为“zyg365”, 2、在类模块的代码编辑区写入代码:如下图3 模块名称为“hongtong”,代码如下在VB中编写代码时:要注意以下声名 Dim XLAPP As Object Set XLAPP = GetObject(, "Excel.Application") 代码中引用对象,如SHEET,Cell等,前面要加“XLAPP.”

(或按照Sub hongtong() 中的格式编写。)Sub hongtong() Dim excelApp As New Excel.Application Dim excelWorkBook As Excel.Workbook Dim excelWorksheet As Excel.Worksheet Set excelWorkBook = excelApp.Workbooks.Add '创建新工作簿 Set excelWorksheet = excelWorkBook.Sheets(1) excelWorksheet.Cells(2, 3) = "宏通" '写入数据excelWorksheet.Cells(3, 4) = "zyg365" '写入数据excelApp.Visible = True '显示excel界面,用于调试excelWorkBook.PrintPreview '打印预览 excelWorkBook.PrintOut '打印输出 excelWorkBook.Saved = True 'excelWorkBook.Close '关闭工作薄 'excelApp.Quit '退出excel End Sub四、工程属性设置:(可以不设置,本步骤可以省略) 为了使自己开发的程序更规范,可以对本工程的属性加以描述:如下图4 执行:“工程(P)”——“工程1属性(E)…”(当前工程中为:“zygtest属性(E)…”)五、保存工程、测试、打包生成Dll文件:

c#数据库连接、操作、封装dll

c#数据库连接去sql server 为了简化数据库连接和操作,编写一个数据库dll文件也是比较有用的。只需要设置参数就可以完成数据库操作 属性 OUTPUTSTR 存储过程输出 CONSTR 数据库连接字符串 SQL_SLT 存储过程名或sql语句列表名 代码错误信息返回或连接关闭状态 public int sql_select(int cmdtype, int sqlst,int n) 数据库语句执行方法, cmdtype设置数据源执行的SQL语句或存储过程,即commandtype属性(0为text枚举,1为storedprocedure枚举,其他值为tabledirect枚举); sqlst设置执行SQL语句的方式,0为executenonquery方法执行,1为executereader 方法执行,其他为executescalar方法执行。设置存储过程参数个数。方法返回受 影响的行数 public Boolean Connopen() 打开数据库连接方法,返回bool值,true为打开,false 为未打开,并将未打开错误返回到EXSTR属性里 public void conn_close() 连接关闭方法,将关闭状态返回到EXSTR属性 public void sqlsp(string p1,string p2,string p3,int p4,int p5) 获取SqlParameter 对象参数,p1获取SqlParameter.ParameterName属性值,p2获取SqlParameter.sqldbtype属性值, p3获取SqlParameter.value属性值,p4获取SqlParameter.size属性值, p5设置SqlParameter.Directions属性值,0为ParameterDirection.Input、 1为ParameterDirection.InputOutput、2为ParameterDirection.Output、 大于3为ParameterDirection.ReturnValue public DataSet ds 返回查询结果集 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Data.SqlClient; using System.Data; using System.Collections; namespace connet { public class jdbccoonn { private string constr, exstr, sql_slt,outputstr; private static int q; public static int Q { get {

类封装成dll

如果你的工作长期与某个领域相关,比如说长期做直接体绘制 (DVR)方面的开发,那么你可能经常使用自己的传递函数类,如果每一个工程你都把传递函数类的.h和.cpp文件添加进去会比较麻烦,其实,我们可以像 使用opengl的库那样来用你自己的类,做法就是把你写好的类封装成dll,具体做法如下: 第一步:制作dll 利用VC6新建工程时选择win32 dynamic-Link Library(空的工程),然后添加头文件和cpp文件。假设你要封装的类的名成是TransferFunction,添加头文件 TransferFunction.h和TransferFunction.cpp到工程中。并将TransferFunction.h修改成: class __declspec(dllexport) TransferFunction { ... } 从而说明以后从dll要被导出的类是哪一个。这样编译完就会产生TransferFunction.dll和TransferFunction.lib两个文件。 第二步:如何使用这个dll 当已经生成dll后,有两种方法可以在其它程序中调用dll中的类和成员函数: 方法一: 1)把TransferFunction.dll和TransferFunction.lib复制到调用程序的执行路径下,注意不是debug路径下。 2)在project->setting->link里添加TransferFunction.lib(或者用 #pragma comment(lib, "TransferFunction.lib") ) 3)把TransferFunction.h中的__declspec(dllexport)改成 __declspec(dllimport) 然后复制到调用程序的执行路径下。 4)最后在主程序中就可以通过包含TransferFunction.h来使用TransferFunction类和它的成员函数。 方法二(推荐): 在方法一中,你每次建立一个工程都需要把 TransferFunction.dll,TransferFunction.lib,TransferFunction.h三个文件拷贝到工程里面 去,事实上这只发挥了dll对类的代码保护的功能,并没有多大的减轻编程人员的工作量,下面的方法可以减少编程人员的工作量,具体步骤:

手工注册组件

8、DLL文件的注册 1)一般DLL文件 使用%windir%\system32\regsvr32.exe注册该文件:%windir%\system32\regsvr32.exe 文件 名 2)Active DLL文件 对于Active DLL,必须注册到组件服务中的某个COM+组件包。 A)、使用组件服务注册:安装新组件,并指定对应的DLL文件 B)、拖放注册:如图,将DLL文件拖放到某个组件包的组件框中

功。 9、EXE文件的注册 一般EXE:无需注册 Active EXE:使用参数RegServer注册 如10.2以前的KDSVRMGR.EXE,可以使用……\kdcom\kdsvrmgr.exe /regserver注册 温馨提醒:Active EXE注册前最好使用 /UnRegServer反注册一下,确保注册表相关键值的正确 性。

10、VBR文件的注册 VBR文件用来连接远程中间层和客户端的桥梁,如果两者不一致或者没有注册,直接结果就是客户端无法连接远程中间层。对于该文件的注册,使用%windir%\system32\clireg32.exe: 1)使用命令直接注册,如: %windir%\system32\clireg32.exe –d –q –s 中间层ip地址或者机器名……\***.vbr 2)使用提示窗口注册,如: 命令窗口输入 %windir%\system32\clireg32.exe ……\***.vbr,出现提示窗口,选择DCOM 方式并输入中间层服务器IP地址或者机器名确定即可。 注意:K/3使用的是DCOM方式。使用Clireg32.exe /?可以查看其所有的参数说明,以下是Clireg32.exe的参数帮助:

如何注册DLL文件

将您下载的"*. DLL" 文件复制到"C:\Windows\system32\" 系统目录下然后按"Win键+R" 或单击"开始"->"运行" 输入"regsvr32 *.dll" 命令注册到系统文件。适用于Windows95/98/xp/2000/vista/win7. 如何注册Windows\system32\下的所有.dll和.ocx文件? 在开始->运行(win+r)下输入命令: cmd /c for %i in (%windir%\system32\*.dll) do regsvr32.exe /s %i cmd /c for %i in (%windir%\system32\*.ocx) do regsvr32.exe /s %i Regsvr 32命令详解(DLL、OCX、CPL文件的注册和反注册工具) Regsvr 32命令是Windows中控件文件(如扩展名为DLL、OCX、CPL的文件)的注册和反注册工具。 命令格式: Regsvr32 [/s] [/n] [/i[:cmdline]] dllname /u 卸载安装的控件,卸载服务器注册; /s 注册成功后不显示操作成功信息框; /i 调用DllInstall函数并把可选参数[cmdline]传给它,当使用/u时用来卸载DLL;/n 不调用DllRegisterServer,该参数必须和/i一起使用。 实例当你运行一个软件,WINDOWS出现出错窗口,提示为*.DLL文件或者*.OCX 文件找不到,可是搜索一下,这个文件就在C:\WINDOWS\SYSTEM目录中.为什么呢?这是因为这个文件没有在WINDOWS中注册.也就是说WINDOWS还不认识它.假设你要注册的是abc.dll.选择"开始--运行"然后输入“regsvr32 abc.dll”,如果弹出提示信息“DllRegisterServerin Wupdinfo.dll succeeded”,说明组件注册成功;失败一般会出现“LoadLibrary("svchost.dll")失败-找不到指定的模块”,如果要卸载此组件,在“开始→运行”中键入“Regsvr32 /u Wupdinfo.dll ”即可。 实例1:IE无法打开新窗口regsvr32 actxprxy.dll regsvr32 shdocvw.dll 重启后如果还不能解决regsvr32 mshtml.dll regsvr32 urlmon.dll regsvr32 msjava.dll regsvr32 browseui.dll regsvr32 oleaut32.dll regsvr32 shell32.dll 实例2:IE无法保存HTML格式文件regsvr32 inetcomm.dll 实例3:MSN无法登陆regsvr32 softpub.dll 实例4:windows默认的文件关联混乱regsvr32 /i shdocvw.dll regsvr32 /i shell.dll regsvr32 /i shdoc401.dll 实例5:Window server 2003中无法播放MP3 regsvr32 i3codeca.acm regsvr32 i3codecx.ax 实例6:Windows添加/删除程序无法启动regsvr32 mshtml.dll regsvr32 /i shdocvw.dll regsvr32 /i shell.dll 实例7:Windows搜索功能故障regsvr32 urlmon.dll 实例8:禁止系统对媒体文件进行预览regsvr32 /u shmedia.dll

vb编写DLL学习

怎样用VB编写DLL文件??? 你先打开VB,然后先中“ActiveX Dll”工程,然后开始编辑。编完后,保存一般是以“.cls”和“.vbw”保存。这时你选择“文件”菜单,弹出下拉框,选中“生成.dll”选项,它就会在上面弹出一个进度条“正在生成.dll文件”。生成以后是一个有好象齿轮状的图标。 如果你要引用,就开一个“标准EXE”工程,然后在“工程”选项中,单击“引用”,找到你刚才的“.dll”的文件名,在前面的复选框中打勾,就可以引用你刚才在那里面写的方法等。 在vb6里建新工程时选用建立dll 做好后用vb的引用就可以了 VB中创建的DLL只是COM组件,无法作为输出函数的DLL,其实这只是个错误的说法。其实MS 非常狡猾,如果你是个VB疯狂发烧友的话,应该早就狂试出这种可以创建输出函数的DLL的方法。 VB编译文件实际上采取了两次编译的方法,首先是调用C2.exe产生*.OBJ文件,然后调用Link.EXE连接。如果在LINK的时候添加EXPORT选项,实际上是可以输出函数的。但是,在VB的工程选项中将这些屏蔽了。而且过分的是:VB在Build完成后会将OBJ文件删除,这样就无法手动通过Link来创建我们需要的DLL了。不过我找到一个比较龌鹾的变通的方法,就是先创建一个Exe工程,在Form_Load事件里面写下面的语句: Sub Main If MsgBox("哈哈", vbOKCancel) = vbOK Then Shell "link2.exe " & Command$ End If End Sub 然后编译为LinkTemp.EXE,接下来将LINK.EXE改名为Link2.exe,将LinkTemp.EXE改名为Link.EXE。这样在VB调用Link.EXE时会弹出对话框,处理就会中断。这时就可以有机会将OBJ文件拷贝出来了。然后我创建了一个ActiveX DLL工程,在这个工程里面添加一个Module并创建一个Public函数mathadd: Public Function mathadd(ByVal a As Long, ByVal b As Long) As Long mathadd = a + b End Function 编译这个工程,在Link的时候就会中断。然后把创建的Class1.obj、Module1.obj、Project1.obj备份出来。然后就可以调用Link2.exe连接OBJ到DLL了,我的连接代码是: Link2.exe "e:\vbdll\Class1.obj" "e:\vbdll\Module1.obj" "e:\vbdll\Project1.obj" "E:\Program Files\Microsoft Visual Studio\VB98\VBAEXE6.LIB" /ENTRY:__vbaS /EXPORT:mathadd /OUT:"e:\vbdll\ProjectOK.dll" /BASE:0x11000000 /SUBSYSTEM:WINDOWS,4.0 /VERS 注意里面的/ENTRY和/EXPORT开关,/EXPORT开关声明了输出函数mathadd。这样就大功告成了,可以被其他语言引入,例如在VB中,只需要: Private Declare Function mathadd Lib "e:\vbdll\ProjectOK.dll" (ByVal a As Long, ByVal b As Long) As Long

VB封装DLL实例讲解(三)

4 1 2点选DLL 3点打开按钮

5 2 3点选DLL 4点打开按钮

我们可以将注册语句放在窗体的加载事件,自动完成DLL的注册,具体可以参看实例。但如果我们有多个DLL需要批量注册时,可以考虑通过软件打包发布工具来完成DLL的注册工作;也可以事先编写BA T文件,让打包发布时将该BA T文件一并打包发布,安装时运行该BA T文件,来完成N个DLL的批量注册,在些就不多着笔墨,大家可以参看实例包中的BA T文件实例。 (二)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 '获得次版本号

c,,中的模板及函数怎么封装为dll

竭诚为您提供优质文档/双击可除c,,中的模板及函数怎么封装为dll 篇一:封装dll 基于Visualc++6.0的dll编程实现 一、前言 自从微软推出16位的windows操作系统起,此后每种版本的windows操作系统都非常依赖于动态链接库(dll)中的函数和数据,实际上windows操作系统中几乎所有的内容都由dll以一种或另外一种形式代表着,例如显示的字体和图标存储在gdidll中、显示windows桌面和处理用户的输入所需要的代码被存储在一个userdll中、windows编程所需要的大量的api函数也被包含在kerneldll中。 在windows操作系统中使用dll有很多优点,最主要的一点是多个应用程序、甚至是不同语言编写的应用程序可以共享一个dll文件,真正实现了资源"共享",大大缩小了应用程序的执行代码,更加有效的利用了内存;使用dll的另一个优点是dll文件作为一个单独的程序模块,封装性、独立性好,在软件需要升级的时候,开发人员只需要修改相应的dll文件就可以了,而且,当dll中的函数改变后,只要

不是参数的改变,程序代码并不需要重新编译。这在编程时 十分有用,大大提高了软件开发和维护的效率。 既然dll那么重要,所以搞清楚什么是dll、如何在windows操作系统中开发使用dll是程序开发人员不得不解 决的一个问题。本文针对这些问题,通过一个简单的例子,即在一个dll中实现比较最大、最小整数这两个简单函数,全面地解析了在Visualc++编译环境下编程实现dll的过程,文章中所用到的程序代码在windows98系统、Visualc++6.0编译环境下通过。 二、dll的概念 dll是建立在客户/服务器通信的概念上,包含若干函数、类或资源的库文件,函数和数据被存储在一个dll(服务器)上并由一个或多个客户导出而使用,这些客户可以是应用程序或者是其它的dll。dll库不同于静态库,在静态库情况下,函数和数据被编译进一个二进制文件(通常扩展名为*.lib),Visualc++的编译器在处理程序代码时将从静态库 中恢复这些函数和数据并把他们和应用程序中的其他模块 组合在一起生成可执行文件。这个过程称为"静态链接",此时因为应用程序所需的全部内容都是从库中复制了出来,所以静态库本身并不需要与可执行文件一起发行。 在动态库的情况下,有两个文件,一个是引入库(.lib)文件,一个是dll文件,引入库文件包含被dll导出的函数

dll注册说明

一、注册dll 首先安装VS2010 在开始菜单中选择Visual Studio命令提示 使用cd命令选择存放dll的文件夹 使用gacutil /i 命令加载dll 使用regasm命令注册dll文件 若程序编译环境和使用环境不同,请为这两个环境均做上述操作,注册dll

二、dll文件说明 本文件中封装了三个方法 SetDataBaseConnectString(string connectionStr) 该方法用于输入数据库连接字符串 AddCuiHuoData(float dianya, float dianliu, float gonglv, float nengliang, float shijian,string zuhao, string lingjianbianma, string gongzhuangbianhao, string xingming, string gongwei, string nengliangzhuangtai, string dianyuan) 该方法用于设备工艺数据录入数据库,返回值为int型,为0时表示传输正常,为-1时表示传输错误。 AddCuiHuoDevPara(float CuiHuoWaterTemp, float CoolingWaterTemp, int SingleBeat, i nt CombineBeat, int SingleCount, int CombineCount, int Sum, int TotalSingleCount , int TotalCombineCount, int TotalSum, bool DevJerk,bool HasPart, bool PowerOn , bool JOG, bool AutoSingleRun, bool AutoCombineRun, bool AutoSingleMode, bool AutoCombineMode, bool UnloadRequire, bool UnloadComplete, bool LoadRequire, bool LoadComplete, bool FirstCoolingWarn, bool SecondCoolingWarn, bool ThirdCoolingWar n, bool FouthCoolingWarn, bool FifthCoolingWarn,bool SixCoolingWarn, bool Sevent hCoolingWarn, bool EightCoolingWarn, bool CoolingTempWarn, bool CuiHuoTempWarn,bo ol PressWarn, bool SmoothWarn, bool FirstDianYuanCoolingWarn, bool SecondDianYua nCoolingWarn, bool ThirdDianYuanCoolingWarn, bool EnergyWarn) 该方法用于设备参数数据录入数据库,返回值为int型,为0时表示传输正常,为-1时表示传输错误。 三、使用dll中的方法 Private Sub WriteInDB_Click() Dim rev1 As Integer Dim rev2 As Integer

用VBA封装DLL

VBA封装为DLL及调用 2012-09-04 02:36:00| 分类:VB / VBA / EXCEL | 标签:|举报|字号大中小订阅 使用程序: 1、Microsoft Office Excel 2003 2、Microsoft Visual Basic 6.0 案例:在工作表的C1单元格得出A1单元格+B1单元格的值。 设计的VBA代码: Sub Test() On Error Resume Next Range("C1") = Cells(1, 1) + Cells(1, 2) End Sub 第一部分、使用VB6.0制作DLL文件 一、启动VB6.0,新建一个ActiveX DLL工程: 二、引用:在VB中对Excel的引用

不同版本的EXCEL在“引用”窗口里显示的版本号也不同:EXCEL2000(Microsoft Office 9.0) EXCEL2002(Microsoft Office 10.0),即ExcelXP EXCEL2003(Microsoft Office 11.0) EXCEL2007(Microsoft Office 12.0) EXCEL2010(Microsoft Office 14.0) EXCEL2013(Microsoft Office 15.0) 三、修改ActiveX DLL的工程名称和类模块名称

四、编写代码: 在代码窗口输入代码,过程名称为Test: Sub Test() On Error Resume Next Dim VBt, YB '定义变量VBt Set VBt = GetObject(, "Excel.Application") '使VBt表示为EXCEL对象 Set YB = VBt.ActiveSheet '使YB表示为EXCEL的当前工作表 '注意要在对象前加上YB变量以表示是EXCEL当前工作表的对象 YB. Range("C1") = YB.Cells(1, 1).Value + YB.Cells(1, 2).Value End Sub 五、设置工程属性(为使开发的程序更规范,可以对工程属性加以描述【非必要设置,可以省略】):

没有找到DLLRegisterServer输入点,无法注册这个文件 的解决方法

没有找到DLLRegisterServer输入点,无法注册这个文件的解决方法(建议用方法一) 运行时错误‘429’,ACTIVEX部件不能创建对象、没有找到DLLRegisterServer 输入点,无法注册这个文件的解决方法 方法1(一般在运行里输入regsvr32 scrrun.dll 按确定即可解决) 如果是某组件没有注册成功,可以使用下面的方法进行手动处理: 开始->运行regsvr32 "C:\*\*\……\*.dll" 注册后就可以使用。你也可以在自己的电脑上进行反注册,在前面加上/u参数即可。 如果还有类似提示,regsvr32 "C:\windows\system32\scrrun.dll",注册后即可。 方法2 把以下内容做成批处理运行 echo 正在修复,这个过程可能需要几分钟,请稍候…… rundll32.exe advpack.dll /DelNodeRunDLL32 %systemroot%\System32\dacui.dll rundll32.exe advpack.dll /DelNodeRunDLL32 %systemroot%\Catroot\icatalog.mdb regsvr32 /s comcat.dll regsvr32 /s asctrls.ocx regsvr32 /s oleaut32.dll regsvr32 /s shdocvw.dll /I regsvr32 /s shdocvw.dll regsvr32 /s browseui.dll regsvr32 /s browseui.dll /I regsvr32 /s msrating.dll regsvr32 /s mlang.dll regsvr32 /s hlink.dll regsvr32 /s mshtml.dll regsvr32 /s mshtmled.dll regsvr32 /s urlmon.dll regsvr32 /s plugin.ocx regsvr32 /s sendmail.dll

相关主题
文本预览
相关文档 最新文档