VC里控件的方法
void CXsOmronCtrl::GetBuffer(long *buffer) 
{
         long m_nChFirstY[100];
m_nChFirstY[0] = 88;
         buffer = m_nChFirstY;
}VB里调用
Private Sub CFixPicture_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Double, ByVal Y As Double)
    Dim buffer(0 To 100) As Long
    buffer(0) = 77
    Call XsOmron1.GetBuffer(buffer(0))
End Sub77能送入控件函数中
但88却不能返回VB中
有人说CopyMemory
可我不知道在我这儿如何运用,帮忙!

解决方案 »

  1.   

    vb的dll声明如何,是否声明为byval格式?
      

  2.   

    vc的函数写得就错了         long m_nChFirstY[100];//局部变量,在栈里分配,出了函数就被释放了
      

  3.   

    //VC里控件的方法
    void CXsOmronCtrl::GetBuffer(long *buffer) 
    {
        long m_nChFirstY[100];
        m_nChFirstY[0] = 88;
        *buffer = m_nChFirstY;
    }
      

  4.   

    //看错应改为
    void GetBuffer(long *buffer) 
    {
        long m_nChFirstY[100];
        m_nChFirstY[0] = 88;
        memcpy((void*)buffer,(void*)m_nChFirstY,sizeof(m_nChFirstY));
    }
      

  5.   

    TO:  jennyvenus(一听说某人是黑客就佩服的要死) 
    我在VB窗体上加载控件,不用声明dll,VB自动声明为GetBuffer(buffer As long)TO:  sunyard()
    对,我问问题的时候简化错了,我源程序的m_nChFirstY其实是CXsOmronCtrl的成员变量TO:  3jaja(3++输入法)
    我试一下再过来
      

  6.   

    可以的!!!但我没搞懂,CXsOmronCtrl控件没有卸载,m_nChFirstY不会被释放啊,
    buffer = m_nChFirstY获得了m_nChFirstY的地址,在VB里应该能指向m_nChFirstY的数据区,为什么拷贝后可以了呢,不拷贝就不行呢?再问一个memcpy的问题,它把指针强转为void型了,那它是按字节拷贝,还是?
    求教!