关于VB.net调用非托管代码的问题

老朱有话说 2007-07-20 10:34:59
有一个程序是用BCB编写的dll,在VB.net中用dllimport使用该dll,提示无法加载此dll,到不到指定的模块,但调用windows/system32下的dll就没有问题?有谁知道如何解决?

不要对我说要注册啊,因为我的这个dll不是com组件!里面没有什么复杂的方法,就是一个简单的加法!
...全文
1036 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
老朱有话说 2007-07-25
  • 打赏
  • 举报
回复
请注意,我说的dll不是.net类库,是个动态库或静态库,要是.net库,哪有那么麻烦!另外,用工具查看时主要是主注意导入表,因为,它里面包含了你调用的系统库,如果你系统没有安装这个库的话,会提示你找不到模块,但这并不是真正的错误所在!
水哥阿乐 2007-07-25
  • 打赏
  • 举报
回复
没有什么很困难的,如果是.net库,直接引用,imports直接可以正常使用.
另外就是如楼主所说可以用DLL查看工具先查看,有很多种方法,vb05,vb6,PEiD等查看工具先了解情况.直接用API声明方式调用.
老朱有话说 2007-07-24
  • 打赏
  • 举报
回复
自己的最后总结

经过自己的研究,现在已全部解决了!

不管是系统的dll,还是自己写的dll(不管是vc,bc写的),都可以自由调用了!

当然,所有的调用声明都需要重新按照VB。net定义的类型重新编写!另外,特别注意的是,需要用我提供的工具查看dll的引入表和导出表,尤其是导入表,当你的dll里附带别的dll时,如果你的系统里没有相应的dll,就会出错,提示找不到你的dll模块,其实,是因为你的dll包含了别的dll,所以,用那个工具可以看出都包含了什么dll,我就是因为没有包含vc6的两个系统dll就搞的我很狼狈,以为是自己的dll问题,其实没有问题!

对调用有什么不明白的问题,可以和我直接联系!

我的目标是,VB牛重出江湖了!
老朱有话说 2007-07-23
  • 打赏
  • 举报
回复
神中冲,在类库中怎么用我的dll啊?
snto 2007-07-23
  • 打赏
  • 举报
回复
就是先新建一个Windows应用程序项目,然后在文件菜单“添加”->“新建项目”,然后选“类库”就可以了,好像在vs中叫解决方案吧,可以包含多个项目。
老朱有话说 2007-07-23
  • 打赏
  • 举报
回复
能讲讲怎么组成符合工程吗?我自己的dll的名字是"uos.dll",这个是不能注册的,因为不是类库!
老朱有话说 2007-07-23
  • 打赏
  • 举报
回复
还是没有明白,我的问题,但还是要谢谢你!

我的dll是VC写的,不可能为了写类库,要在VB.NET重写!否则,谈不上调用,因为,都重新做了!
snto 2007-07-23
  • 打赏
  • 举报
回复
什么叫“在类库中怎么用我的dll啊?”,我的意思你直接把那些函数啊、方法啊、类啊,写进类库中,类库就是通常说的dll,为exe项目添加类库引用的方法是:在exe项目的项目菜单找到“XXX属性”,然后在“引用”选项卡中找到“添加”按钮,选择“引用”,在新出来的“添加引用”对话框的“项目”选项卡中找到你的类库就行了(前提先编译类库项目),然后在exe项目中想使用类库的窗体或者类里引入命名空间如:Imports ClassLibrary1就可以了
southpig 2007-07-22
  • 打赏
  • 举报
回复
接分来了
snto 2007-07-22
  • 打赏
  • 举报
回复
呵呵,不错,谢谢分享,我一般是原来的exe项目上建个新的类库项目,组成复合工程,然后在exe里直接引用类库(当然,编译后的类库要和exe在一起的)
老朱有话说 2007-07-22
  • 打赏
  • 举报
回复
自己搞定!

网上有很多解决方案,大多数并没有真正经过思考,只是到处乱抄!

解决的办法:
1)系统级的dll,在VB.NET中都可以调用,没有任何问题!
2)调用自己编写的Dll比较麻烦,主要和编写语言有关,VC/VC++写的dll需要改写,重新编译!这里有很多地方需要注意,一个是GUI的DLL,一个是进程的Dll,一个是第三方的DLL,前一个和系统级调用是一样的,但我没有成功,原因,可能是VC++写的DLL编译有错,后两个没试过,不知是否可以成功调用。
3)第三方的Dll,如:unrar.dll,这些应该调用没有问题

特别注意的是,调用的时候,你的Dll可能要放在工程文件夹中或着是debug目录中,但不一定,因为我的两个地方都有,有成功调用的也有不能调用的!

另外,看dll的工具,请使用PEiD 汉化版或VS 2005里面的dumpbin,他们都可以看到相关的入口信息和出口信息!
反编译工具(VB Decompiler Pro):是一款针对使用Visual Basic 5.0/6.0开发的程序的反编译器。反编译工具(VB Decompiler Pro)可以被编译成伪代码p-code或native code模式。由于伪代码是由高级指令组成, 因此是很有可能反编译成源代码的(当然, 变量名,函数名等等是无法反编译的).反编译工具(VB Decompiler Pro)可以恢复众多伪代码指令,但要反编译成源代码还是有很多工作需要完成, 反编译器将帮助您更轻松的分析程序算法以及部分恢复源代码。 如果一个程序被编译成native code, 从机器码恢复源代码是几乎不可能的. 但即便是这种情形下VB Decompiler还是可以帮助你分析程序. VB Decompiler包含了一个强大的支持包含MMX和SSE的Pentium Pro指令集的反编译器. 它还包含一个代码分析器, 用于搜索所有API调用,汇编代码中的字符串引用并将结果修改为相应的注释。 加入一个程序被编译成.net汇编,反编译器将恢复所有的托管代码的数据表和模块,并且使用IL反汇编器反汇编所有的方法,函数以及事件。反编译并不需要.NET Framework并且支持所有的32位Windows操作系统。 VB Decompiler也将反编译文件中的所有的图形界面窗体以及控件。出于技术需要,反编译器可能显示所有控件的编译地址。 对于加壳的VB程序,首先需要脱壳后才能正常反编译。 总而言之, VB Decompiler是一款出色的程序分析工具. 尤其是当您不慎丢失源代码并且需要部分恢复原工程的时候。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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