VB 怎么编写DLL
请问各位VB高手,怎么用VB编写DLL啊??编好之后又怎么调用啊??我在用DLL的时候出现过很多问题..1.不能调DLL里的Sub编译错误:不能找到方法或数据成员.把Ac...
请问各位VB高手,怎么用VB编写DLL啊??编好之后又怎么调用啊??
我在用DLL的时候出现过很多问题..
1.不能调DLL里的Sub
编译错误:不能找到方法或数据成员.
把ActiveX DLL工程添加到标准EXE工程后就不会出错了..
单独打开标准EXE工程调用生成的DLL就出错,
2.调用自己编写的DLL为什么不用像调API函数那样
如:Public Declare Function GetPrivateProfileString Lib _
"kernel32" Alias "GetPrivateProfileStringA"……
(别名又是怎么来的??)
而是用:Public objIni As iniManager.clsIni (DLL名.模块名)
然后再 objIni.方法名
3.不引用DLL也会出错
4.当生成EXE后再运行也会出现 1 这样的错误,还会出现以下错误
运行时错误 '430' 类不支持自动化或不支持期望的窗口
或者是 ActiveX无法创建对象
5.VB编写DLL能不能添加窗体或其它控件..
6.能不能编写像调API函数那样的DLL
(如果能希望能给个例子看看)
请高手对上面几个问题作答,,谢谢..(问题比较多,,不好意思啊..) 展开
我在用DLL的时候出现过很多问题..
1.不能调DLL里的Sub
编译错误:不能找到方法或数据成员.
把ActiveX DLL工程添加到标准EXE工程后就不会出错了..
单独打开标准EXE工程调用生成的DLL就出错,
2.调用自己编写的DLL为什么不用像调API函数那样
如:Public Declare Function GetPrivateProfileString Lib _
"kernel32" Alias "GetPrivateProfileStringA"……
(别名又是怎么来的??)
而是用:Public objIni As iniManager.clsIni (DLL名.模块名)
然后再 objIni.方法名
3.不引用DLL也会出错
4.当生成EXE后再运行也会出现 1 这样的错误,还会出现以下错误
运行时错误 '430' 类不支持自动化或不支持期望的窗口
或者是 ActiveX无法创建对象
5.VB编写DLL能不能添加窗体或其它控件..
6.能不能编写像调API函数那样的DLL
(如果能希望能给个例子看看)
请高手对上面几个问题作答,,谢谢..(问题比较多,,不好意思啊..) 展开
5个回答
展开全部
编写API类型的DLL请看我后面的哪个文章,不明白的可以百度HI我,我实验成功了
1-4问题,原因是ActiveX DLL 本质是一个控件,所以你使用它就必须像使用控件一样引用,才可以
5、可以,但是这样DLL很难封装API一类的函数,有点类似于自定义控件的效果。
6、可以,见下面的文章
怎样用VB编写.DLL动态链接库文件
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 /VERSION:1.0 /Dll /INCREMENTAL:NO /OPT:REF /MERGE:.rdata=.text /IGNORE:4078
注意里面的/ENTRY和/EXPORT开关,/EXPORT开关声明了输出函数mathadd。这样就大功告成了,可以被其他语言引入,例如在VB中,只需要:
Private Declare Function mathadd Lib "e:\vbdll\ProjectOK.dll" (ByVal a As Long, ByVal b As Long) As Long
1-4问题,原因是ActiveX DLL 本质是一个控件,所以你使用它就必须像使用控件一样引用,才可以
5、可以,但是这样DLL很难封装API一类的函数,有点类似于自定义控件的效果。
6、可以,见下面的文章
怎样用VB编写.DLL动态链接库文件
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 /VERSION:1.0 /Dll /INCREMENTAL:NO /OPT:REF /MERGE:.rdata=.text /IGNORE:4078
注意里面的/ENTRY和/EXPORT开关,/EXPORT开关声明了输出函数mathadd。这样就大功告成了,可以被其他语言引入,例如在VB中,只需要:
Private Declare Function mathadd Lib "e:\vbdll\ProjectOK.dll" (ByVal a As Long, ByVal b As Long) As Long
参考资料: http://www.vbgood.com/thread-54971-1-1.html
展开全部
VB做的Dll文件基本是Active Dll文件,虽然网上有说可以做成标准的Dll文件,但后续用的时候往往会有很多问题的。当初我也是准备做标准Dll文件的,但后来还是做成了Active Dll文件。
自己写的Dll文件,要用里面的方法与属性时,肯定需要引用的,不然无法使用。
VB编写的Dll文件,是可以添加窗体或其它控件的;
自己写的Dll文件,要用里面的方法与属性时,肯定需要引用的,不然无法使用。
VB编写的Dll文件,是可以添加窗体或其它控件的;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请先打开VB,然后先中“ActiveX Dll”工程,然后开始编辑。编完后,保存一般是以“.cls”和“.vbw”保存。这时你选择“文件”菜单,弹出下拉框,选中“生成.dll”选项,它就会在上面弹出一个进度条“正在生成.dll文件”。生成以后是一个有齿轮状的图标。
如果你要引用,就开一个“标准EXE”工程,然后在“工程”选项中,单击“引用”,找到你刚才的“.dll”的文件名,在前面的复选框中打勾,就可以引用你刚才在那里面写的方法等。
如果你要引用,就开一个“标准EXE”工程,然后在“工程”选项中,单击“引用”,找到你刚才的“.dll”的文件名,在前面的复选框中打勾,就可以引用你刚才在那里面写的方法等。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
总的来说,VB6的DLL不是真正的DLL,相当于Acitve X,所以不可以像API那样条用。
1.模块里的东西只对当前应用程序有效,如果跨应用程序当然不行。
2.因为VB 的dll不是真正的dll(VB2008也是如此)API别名是微软等软件开发者自己定义的方法名
3.VB的DLL是OCX dll,肯定要引用。
4.这个不知道
5.我的VB6可以啊
6.以前用过一个插件,但BUG巨多,被我删了
真正的dll还是得用VC++之类的东西编译才行
1.模块里的东西只对当前应用程序有效,如果跨应用程序当然不行。
2.因为VB 的dll不是真正的dll(VB2008也是如此)API别名是微软等软件开发者自己定义的方法名
3.VB的DLL是OCX dll,肯定要引用。
4.这个不知道
5.我的VB6可以啊
6.以前用过一个插件,但BUG巨多,被我删了
真正的dll还是得用VC++之类的东西编译才行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我看到的挺简单的教程,给你参考
打开:VB6 (要安装该软件)
1.打开新建一个标准EXE.
2.对窗体属性(form1) 的设置:
Borderstyle =0-none
form1 改为=( SS )新名称
StartupPositio=2 将启动封面始终悬挂在屏幕中部
Icon 设定图标=(自行选择中意的ICO图标)这个图标就是程序的图标.
点右键选菜单编辑器 (可进行文字编辑).
点图片选项控件(lmage) 在窗体属性(Picture)选择图片:
3.添加一个Timer控件(时钟控件),将其窗体属性Interval设为1000,双击Timer控件出现代码窗口,输入如下代码:
Private Sub Timer1_Timer()
Dim Exl As Object
Set Exl = CreateObject("Excel.Application")
Exl.Workbooks.Open (App.Path & "\" & "XXX文件.dll") ’引用EXCEL作品
Exl.Visible = True
Unload Me
End Sub
4.文件>>生成EXE文件, 将其保存到步骤一中的文件夹中去。大功告成!
5.将"EXCEL文件" 用软件(TOTAL Commander)改文件类型为DLL. 选定文件>> Shift+F6 >>修改扩展名>>回车(Enter)
打开:VB6 (要安装该软件)
1.打开新建一个标准EXE.
2.对窗体属性(form1) 的设置:
Borderstyle =0-none
form1 改为=( SS )新名称
StartupPositio=2 将启动封面始终悬挂在屏幕中部
Icon 设定图标=(自行选择中意的ICO图标)这个图标就是程序的图标.
点右键选菜单编辑器 (可进行文字编辑).
点图片选项控件(lmage) 在窗体属性(Picture)选择图片:
3.添加一个Timer控件(时钟控件),将其窗体属性Interval设为1000,双击Timer控件出现代码窗口,输入如下代码:
Private Sub Timer1_Timer()
Dim Exl As Object
Set Exl = CreateObject("Excel.Application")
Exl.Workbooks.Open (App.Path & "\" & "XXX文件.dll") ’引用EXCEL作品
Exl.Visible = True
Unload Me
End Sub
4.文件>>生成EXE文件, 将其保存到步骤一中的文件夹中去。大功告成!
5.将"EXCEL文件" 用软件(TOTAL Commander)改文件类型为DLL. 选定文件>> Shift+F6 >>修改扩展名>>回车(Enter)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询