private declare sub GetBuffer lib ... (byref buffer as long )dim x(10) as long
GetBuffer(x(0))

解决方案 »

  1.   

    我的函数是控件的方法,不是dll过来的
    在VB里它自动写成了GetBuffer(buffer As Long)
    不过跟你说的byref buffer as long 应该是一样
    返回的数据就是不对啊
      

  2.   

    dim x(10) as long
    GetBuffer(x(0))
    不行吗?
      

  3.   

    VC时你写的吗?把GetBuffer(long *buffer)的执行部分贴上来
      

  4.   

    void CXsOmronCtrl::GetBuffer(long *buffer) 
    {
             long m_nChFirstY[100];
             memset(m_nChFirstY, 8, 100);
             buffer = m_nChFirstY;
    CString s;
    s.Format("%d", buffer[0]);
    MessageBox(s);
    }MessageBox已反映出buffer[0]为8
    Dim buffer(0 To 1500) As Long
    Dim s As longPrivate Sub CFixPicture_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Double, ByVal Y As Double)
        Call XsOmron1.GetBuffer(buffer(0))
        s = buffer(0)
    End Subs值还是0
      

  5.   

    上面的订正一下
    void CXsOmronCtrl::GetBuffer(long *buffer) 
    {
             long m_nChFirstY[100];
             memset(m_nChFirstY, 0, 100);
             m_nChFirstY[0] = 8;
    buffer = m_nChFirstY;
    CString s;
    s.Format("%d", buffer[0]);
    MessageBox(s);
    }
      

  6.   

    能告诉我copymemory怎么用吗?
    就这个例子
    谁告诉我,我可以再加分的
      

  7.   

    void CXsOmronCtrl::GetBuffer(long **buffer) 
    {
             //long m_nChFirstY[100];
             memset(*buffer, 8, 100);
             buffer = m_nChFirstY;
    CString s;
    s.Format("%d", *buffer[0]);
    MessageBox(s);
    }估计你的IDL也不对
      

  8.   

    void CXsOmronCtrl::GetBuffer(long **buffer) 
    {
             long *m_nChFirstY;
             m_nChFirstY = *buffer
             memset(m_nChFirstY, 8, 100);
             
    //CString s;
    //s.Format("%d", *buffer[0]);
    //MessageBox(s);
    }
    订正一下
      

  9.   

    我试用了一下CopyMemoryPrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Sub CFixPicture_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Double, ByVal Y As Double)
        Dim yData(0 To 100) As Long
        Dim lpbuff As Long
        Dim s As Long
        
        XsOmron1.GetBuffer lpbuff
        
        CopyMemory yData(0), lpbuff, 4
        s = yData(0)
    End Sub还是不行,s数值是零
      

  10.   

    这是COM中属性或方法回传指针的规矩
    记得要改IDL定义