vc中的结构是这样的
typedef struct ImageInfoStruct{
int imageH;  
int imageW;  
unsigned char *imageData; 
}ImageInfo
vb中对应的结构是这样的
Public Structure ImageInfo
        Public imageH As Int32
        Public imageW As Int32
        Public imageData() As byte
End Structure
下面是我在vb中的引用
    Public Declare Function process Lib "process .dll" Alias "ProcessImage" _
    (ByRef pImages As ImageInfo, ByRef numIm As Integer) As Integer
下面是vb中调用的语句
        sInfo.imageH = 480
        sInfo.imageW = 640
        ReDim sInfo.imageData(307199)
         .......读了一幅图片
        i = ProcessImage(sInfo, 1)
跟踪调试dll进去以后,发现数值型的参数都能得到正确的值,但是存储图片的数组确没能把图片传递过去,请问怎么解决这个问题?

解决方案 »

  1.   

    VB.Net 请到:http://forum.csdn.net/SList/VBDotNET/UnClosedList/关键一点在 VC 中,imageData 是一个 char* 指针;
    如果你在的结构定义在 VB6 中,imageData 是一个 SAFEARRAY* 指针,所以应该定义成指针类型,然后将其指向数组的第一个成员;
    VS.2005 没试过,不过应该是相同的道理。以下为 VB6 的调用方式:
    Option ExplicitPublic Declare Function process Lib "process .dll" Alias "ProcessImage" _
        (ByRef pImages As ImageInfo, ByRef numIm As Integer) As Integer
    Public Type ImageInfo
        imageH As Long
        imageW As Long
        imageData As Long
    End TypeSub Main()
        Dim sInfo As ImageInfo
        Dim aData() As Byte
        ReDim aData(307199)
        sInfo.imageH = 480
        sInfo.imageW = 640
        sInfo.imageData = VarPtr(aData(0))
        .......读了一幅图片
        i = ProcessImage(sInfo, 1)
    End Sub
      

  2.   

    结构:    <StructLayout(LayoutKind.Sequential)> _
        Public Structure ImageInfoStruct
            Public imageH As Integer
            Public imageW As Integer
            Public imageData As IntPtr
        End StructureDim data() As Byte
    sInfo.imageH = 480 
    sInfo.imageW = 640 
    ReDim data(307199) 
    sInfo.imageData = Marshal.UnsafeAddrOfPinnedArrayElement(data, 0)i = ProcessImage(sInfo, 1) 
      

  3.   

    感谢supergreenbean,困扰我几天的问题终于解决了.