VB dll加载错误

love_4444 2009-07-19 02:10:59
编译程序时提示xxxxx。dll编译错误,xxxxx。dll是程序自己生成的文件。程序生成xxxxx。dll的时候没有问题,打包的时候就提示这个xxxxx。dll编译错误。(属于outlook Add in,原来是2000的版本现在升级到2007了)。

还有就是程序刚打开按F5的时候提示“加载DLL错误”,但打开form后在按F5就没有提示了。也能顺利生成xxxxx。dll文件,就是打包的时候提示xxxxx。dll编译错误。

请问如何解决啊?
...全文
335 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Simao 2009-07-21
  • 打赏
  • 举报
回复
学习...
gooore 2009-07-21
  • 打赏
  • 举报
回复
msdn..
http://support.microsoft.com/kb/245115

简单说后期绑定就是根绝类的progid将对象实例化,不像前期绑定先告知类的clsid。这样不用加引用就可以实例化需要的对象。


Option Explicit

Private oExcelApp As Object '//声明为object
Private oWorkBook As Object
Private oWorkSheet As Object

Private Sub Delete_Click()
Set oWorkSheet = oWorkBook.Worksheets(1)
oWorkSheet.Delete
End Sub


Private Sub Form_Load()
Set oExcelApp = CreateObject("Excel.Application") '//根据progid创建对象
Set oWorkBook = oExcelApp.Workbooks.Open("D:\gooore.xls")
oExcelApp.Visible = True
End Sub

gooore 2009-07-20
  • 打赏
  • 举报
回复
可能是版本兼容的问题。可以将dll在新版本环境里面重新编译试一下(也可能需要重新引用reference)

楼主可以考虑代码后期绑定,这样不会出现版本兼容的问题 ^_^
数据之巅 2009-07-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gooore 的回复:]
可能是版本兼容的问题。可以将dll在新版本环境里面重新编译试一下(也可能需要重新引用reference)

楼主可以考虑代码后期绑定,这样不会出现版本兼容的问题 ^_^
[/Quote]
你好,我也遇到这个问题。“代码后期绑定”是怎么回事啊?
cqq_chen 2009-07-20
  • 打赏
  • 举报
回复
关注!
love_4444 2009-07-20
  • 打赏
  • 举报
回复
上面已经提到“程序生成xxxxx。dll的时候没有问题”。就是在新版本中重新编译后的。但是上面的问题还是存在。不过依然谢谢你们的回答。继续关注中。。。如果最后没有满意的答案这100分就给你两个了。热心帮助别人也是好的。^_^
love_4444 2009-07-20
  • 打赏
  • 举报
回复
上面已经提到“程序生成xxxxx。dll的时候没有问题”。就是在新版本中重新编译后的。但是上面的问题还是存在。不过依然谢谢你们的回答。继续关注中。。。如果最后没有满意的答案这100分就给你两个了。热心帮助别人也是好的。^_^
东方之珠 2009-07-19
  • 打赏
  • 举报
回复
将DLL在2007下重新编译一下,试一下。
VBKiller使用说明Killer是一个VB辅助逆向分析的工具。首先声明,它不能帮你把VB程序反编译到VB源代码,只能使得VB程序的反汇编看起来更接近VB代码。 配合IDA使用,可以建立VB程序几乎所有的类结构、方法表、函数体,并建立方法表结构体;可以识别VB程序中引用的COM的CLSID,并使用ProgID命名;可以建立任意COM程序(非VB编译的也可以)的方法表、函数体,并建立方法表结构体,可以在待分析的VB程序中使用这些结构体。经过这些处理,待分析的VB程序在IDA中就形成了多个很规范类、方法,离逆向到源码已经不远了。 说用方法: 点击浏览按钮选中一个COM程序,DLL或者Exe或者ocx,如果不是VB程序,要在“非VB程序”那里打勾,点击查看。左边的框框就列出了所选程序的所有COM接口,如果还要看类和枚举,可以选中“显示接口以外的所有类”。点击任意一个接口,右边就显示了该接口的所有方法,在方法表中地址、方法体的真实地址。如果要显示前面七个基本方法,则需要选中“显示基本接口的方法”。如果是非VB程序,右边有映像基址和虚拟基址,映像基址就是程序的ImageBase,而虚拟基址就是分配到内存空间里面的起始地址,程序默认大概计算了这个地址,如果不正确,就需要手工修改,因为程序得到的方法表地址是运行空间里面的,必须知道这两个基址才能转成静态文件中的地址,所以很重要,不能填写,否则就会识别错误。点击生成IDC,就可以生成当前选中的接口所对应的IDC文件,类和枚举是不能生成IDC的,把这个IDC加载到IDA中,就可以自动识别处理相应的方法地址了。点击全部生成,就可以生成所有接口的IDC文件(放到同一个文件里面)。选中“生成结构体”,再使用两个生成按钮,就可以生成这个COM对应的结构体建立脚本,把这个结构体IDC载入IDA,就会在IDA中生成一批对应的结构体,比如:分析的一个程序用到了数据库操作和加解密操作,一般要载入ADO和CAPICOM的结构体脚本。 VBKiller还有一个扫描识别COM的功能尚未完成。 同一个目录下,还有另外几个c文件。 其中,header.c是上面的IDC文件所要包含的,这是公用函数文件; vb.c是网络上流传的那个vb.idc修改后的版本,没有改多少,感觉很多地方没有起作用。可以利用该脚本建立VB程序的类结构和事件表; vboop.c是专门辅助分析VB面向对象功能的脚本。 里面的Do_BasicOOP方法主要是根据vb.c建立好的事件表,处理对应的函数体,如果函数没有建立,则建立函数,并把该函数改名为与事件表的名字一致,同时建立每个类的方法表结构体,方面以后分析。 ParseAPI用于处理VB内部函数,它将扫描所有指定的函数的交叉引用,给该函数加上可重复注释,尝试识别参数,并给各个参数加上注释,如果参数是寄存器,则再往上寻找寄存器数据的来源,并加上注释。扫描的函数和注释是代码里面指定的,目前指定了大多数函数,大家可以根据自己需要加上新的函数。 ParseNew方法用于扫描所有的_vbaNew和_vbaNew2的交叉引用,并尝试识别相应的CLSID,如果能识别,则修改为相应的程序名,以方便查看。识别是内置实现的,目前内置的不多,大家可以根据需要添加自己的。扫描是,如果发现无法识别的CLSID,程序将会把该CLSID写入到同目录下的UnKnown.txt中,分析一遍后可以去查看该文件,如果发现有未识别的CLSID,则到注册表中搜索该CLSID,得到程序名后,在程序相应地方加上即可。

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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