!!动态链接库问题,高手们快来帮忙呀

ywcyj 2003-05-14 07:29:24
代码如下:67行出错
Imports System
Imports System.IO
Imports System.Runtime.InteropServices
Public Class test
Declare Sub PBMCAL Lib "PBM2.dll" Alias "_PBMCAL@52" (ByVal eta As Single, ByVal omeg As Single, ByVal radiu As Single, ByVal boverd As Single, ByVal weight As Single, ByVal psai As Single, ByVal kind As Integer, ByRef dt As Single, ByRef xtt As Single, ByVal psaiw2 As Single, ByVal Index As Integer, ByVal aett2 As Single, ByRef OResult As Single)
End Class

......

行 67: test.PBMCAL(eta / 10, omeg * 3.1415926 / 30, radiu / 2, boverd, weight / 9.8, psai, kind, dt(1), xtt(1), psaiw2, index2, aett2, OResult1(1))

错误信息:
未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
...全文
181 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
maochilong 2003-05-22
  • 打赏
  • 举报
回复
对,一定要改为short
如果你的动态连接库是用c/c++/vc编的话
另外把你的动态连接库拷贝到系统的system目录下试一下
sumtec 2003-05-19
  • 打赏
  • 举报
回复
请问你这个声明是否使VB6下面直接拷贝过来的?如果是,请将Integer改为Short。
maochilong 2003-05-19
  • 打赏
  • 举报
回复
'Public Class test/这行不要
Declare Sub PBMCAL Lib "PBM2.dll" Alias "_PBMCAL@52" (ByVal eta As Single, ByVal omeg As Single, ByVal radiu As Single, ByVal boverd As Single, ByVal weight As Single, ByVal psai As Single, ByVal kind As Integer, ByRef dt As Single, ByRef xtt As Single, ByVal psaiw2 As Single, ByVal Index As Integer, ByVal aett2 As Single, ByRef OResult As Single)
‘End Class/这行不要

67行变为
PBMCAL(eta / 10, omeg * 3.1415926 / 30, radiu / 2, boverd, weight / 9.8, psai, kind, dt(1), xtt(1), psaiw2, index2, aett2, OResult1(1))

Montaque 2003-05-16
  • 打赏
  • 举报
回复
Faint,是Declare,不用事例华的

如果,还有问题。可能就是你的dll有问题。
ywcyj 2003-05-16
  • 打赏
  • 举报
回复
谢谢大家帮忙支持
这个DLL不是标准的COM组件,本身应该没有问题,以前在vb下使用过
sumtec 2003-05-16
  • 打赏
  • 举报
回复
一般出了这种情况多数是你得Declare没有写好,在要么就是Dll本身写的并不是非常规范。比如说ByRef的Single类型的参数,在返回之前改变成null了,这样就会出现这种情况。

此外,比如不是ByRef的地方ByRef了也可能会这样。
ywcyj 2003-05-15
  • 打赏
  • 举报
回复
楼上的兄弟,我的确用dim myTest=new test()实例化test类了
但还是出现上面的错误信息
W_W_Q 2003-05-15
  • 打赏
  • 举报
回复
1、首先,你应该看一下vs.net帮助“使用非托管 DLL 函数”
2、就是没实例化,错误信息已经很明白。个人不建议直接公开PBMCAL,比如先建立自己的testsub过程,在testsub过程中调用PBMCAL。因此:
dim myTest=new test()
mytest.testsub
或者用shared声明testsub,就可以不用实例类而直接引用了。

ywcyj 2003-05-15
  • 打赏
  • 举报
回复
Montaque(Rainman),我试了你说的方法,还是老样子
Acony,我试了先实例化,但没啥变化。再说了,若是实例化的问题,编译就过不去
现在编译没有问题的
好郁闷亚
oldjackyone 2003-05-15
  • 打赏
  • 举报
回复
如果是Class 就要用New 声明实例化。

如果是Structure 那就不需要用New声明实例化了。

Acony 2003-05-15
  • 打赏
  • 举报
回复
使用test 类时实例化了没有?
Montaque 2003-05-15
  • 打赏
  • 举报
回复
dim s as Single=0.0
test.PBMCAL(eta / 10, omeg * 3.1415926 / 30, radiu / 2, boverd, weight / 9.8, psai, kind, dt(1), xtt(1), psaiw2, index2, aett2, s)
实验一下。
ywcyj 2003-05-15
  • 打赏
  • 举报
回复
高手们快来呀

16,554

社区成员

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

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