none
这段代码为什么出错? RRS feed

  • 问题

  • 全部代码如下:

    Public Class Form1
        Private Declare Sub ShockproofGetAccelerometerData Lib "sensor.dll" (ByRef data As AccelData)
    
        Private Structure AccelData
    
            Dim stat As Integer
            Dim x As Short
            Dim y As Short
    
        End Structure
    
        Public Function GetAccelData() As Short '(ByVal stat As Short, ByVal x As Short, ByVal y As Short) As Long
    
            Dim data As AccelData
    
            ShockproofGetAccelerometerData(data)
    
            Debug.Print("Status: " & data.stat)
            Debug.Print("X: " & data.x)
            Debug.Print("Y: " & data.y) 'WORKS
            Label1.Text = data.y        'WONT WORK,WHY?
        End Function
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            GetAccelData()
        End Sub
    End Class

    这段代码在注释了“'WONT WORK,WHY?”的那一句会报错:

    在 System.AccessViolationException 中第一次偶然出现的“WindowsApplication1.exe”类型的异常

    Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

    请问这是为什么?

    我要读的三个数据都读出来了,为什么赋给label1就会出错呢?

    谢谢!

    2010年3月22日 3:38

全部回复

  • Label1.Text = data.y.ToString()
    2010年3月22日 4:38
  • 好像不行,这个方法我试过,还是一样的报错信息。

    而且,我觉得就算我不写.ToString,程序运行到这里的时候,好像它也会自动调用tostring方法吧?

    2010年3月22日 7:04
  • 出错提示就是类型异常,现在的关键就是 data.y 的类型, 你看data.y是不是定长变量.


    人要诚实!还要踏实! 我先为人人,人人再为我! 我的Spaces: http://mydodu.spaces.live.com/
    2010年3月24日 17:44
  • 我上面写的代码里面已经定义了data的结构啊,y是一个short值啊。

    我这个程序是个toy program,就这一个class,没有别的什么模块了,所有代码都在这儿。

    2010年3月25日 0:56
  • 如果谁用的是thinkpad的笔记本电脑,可以把这段代码复制过去测试一下,那个sensor.dll文件是thinkpad中APS驱动的一个DLL文件。

    2010年3月25日 0:58
  • 你把sensor.dll发出来.我给你测试一下.


    人要诚实!还要踏实! 我先为人人,人人再为我! 我的Spaces: http://mydodu.spaces.live.com/
    2010年3月26日 14:55
  • 我发了好像没用吧...

    那个sensor.dll文件是thinkpad的硬件驱动程序中的DLL文件,它里面的函数可以读取thinkpad中一个加速度感应器的值。

    如果你是thinkpad的电脑,自然就有这个DLL文件,如果你不是thinkpad的电脑,有这个DLL文件你也没有加速度感应器啊,还是用不了吧。

    2010年3月27日 2:14
  • 我发了好像没用吧...

    那个sensor.dll文件是thinkpad的硬件驱动程序中的DLL文件,它里面的函数可以读取thinkpad中一个加速度感应器的值。

    如果你是thinkpad的电脑,自然就有这个DLL文件,如果你不是thinkpad的电脑,有这个DLL文件你也没有加速度感应器啊,还是用不了吧。

    2010年3月27日 2:14