我用向导添加了一个方法 
BOOL CHIDUSBCtrl::Write(const VARIANT FAR& Data) 
{
// TODO: Add your dispatch handler code here
if(!IsOpen())
{
return FALSE;
}
LONG length;//数据长度
COleSafeArray safearray_data;  
safearray_data=Data;   //运行到这里时程序报错误 //忽略上面的错误,运行下面的代码时程序还是报错,
length=safearray_data.GetOneDimSize(); //再忽略上面的错误,运行下面代码没有错误了
BYTE *Buf=new BYTE[length+1];
for(LONG i=0;i<length;i++)
safearray_data.GetElement(&i,Buf+i);
DWORD dw;
OVERLAPPED  overlap;
memset(&overlap, 0, sizeof(OVERLAPPED)); 

//向设备写入一个字符串
BOOL bResult=WriteFile(m_hDevice, Buf, length, &dw, &overlap);
delete Buf;
return bResult;
}
如上方法,功能是向设备写入一个字符串,就像MSComm控件写串口的功能一样请问其中表注的两个错误怎么解决呢
不胜感激!

解决方案 »

  1.   

    传进来的参数有问题吧。用HRESULT VariantCopy( 
      VARIANTARG *  pvargDest,  
      VARIANTARG *  pvargSrc  
    );试试,能不能完成复制啊。
    你怎么调用这个接口的?
      

  2.   

    我用的MFC ActiveX Control Wizard
    添加方法 Write 參數是VARIANT類型我用VB寫的測試程序
    先打開設備
    然後寫入一個字串
    假設控件名字是HIDUSB1HIDUSB1.OpenHIDUSB1.Write "abcdef"
      

  3.   

    我用的MFC ActiveX Control Wizard
    添加方法 Write 参数是VARIANT类型我用VB写的测试程序
    先打开设备
    然后写入一个字符串
    假设控件名字是HIDUSB1HIDUSB1.OpenHIDUSB1.Write "abcdef"我现在试一下这个方法
    不胜感激!
      

  4.   

    error C2664: 'VariantCopy' : cannot convert parameter 2 from 'const struct tagVARIANT *' to 'struct tagVARIANT *'我對VARIANT也不是很熟悉的哦
    請大俠幫幫我喔不勝感激!
      

  5.   

    safearray_data=Data;   //运行到这里时程序报错误
    程序报什么错误啊?断点停在哪个语句?
      

  6.   

    编译是没有任何错误的
    我用VB测试这个控件的时候
    报的错误就是简单的程序严重错误, 选择: 1终止 2重试 3忽略 我控件断点不知道怎么搞,我是这样的
    BOOL CHIDUSBCtrl::Write(const VARIANT FAR& Data) 
    {
    // TODO: Add your dispatch handler code here
    if(!IsOpen())
    {
    return FALSE;
    }
    LONG length;//数据长度
    COleSafeArray safearray_data;  
    MessageBox(“1”);
    safearray_data=Data;   //运行到这里时程序报错误
    MessageBox(“2”);
    //忽略上面的错误,运行下面的代码时程序还是报错,
    length=safearray_data.GetOneDimSize();
    MessageBox(“3”);
    //再忽略上面的错误,运行下面代码没有错误了
    BYTE *Buf=new BYTE[length+1];
    for(LONG i=0;i<length;i++)
    safearray_data.GetElement(&i,Buf+i);
    DWORD dw;
    OVERLAPPED  overlap;
    memset(&overlap, 0, sizeof(OVERLAPPED)); 

    //向设备写入一个字符串
    BOOL bResult=WriteFile(m_hDevice, Buf, length, &dw, &overlap);
    delete Buf;
    return bResult;
    }
    测试在
    MessageBox(“1”);
    之后,报严重错误,然后点 [忽略]
    MessageBox(“2”);
    还是错误,继续点忽略
    然后MessageBox(“3”);
    然后没有错误了
      

  7.   

    请问哪里有MSComm控件的源代码下载呀
    或者是和差不多的ActiveX控件的源程序
    不胜感激!
      

  8.   

    把:
    COleSafeArray safearray_data;  
    改为:
    COleVariant safearray_data;
      

  9.   

    还是搞不定
    可能是接口定义错误
    从外界向ActiveX控件传入一个VARIANT值,参数应该用VARIANT还是VARIANT*类型的呢?
    我就使用MFC ActiveX Wizard添加的方法,
    好像两个都不行喔!
    怎么单步调试ActiveX程序呢?
    基本的问题,分不够再加
    请做过ActiveX开发的大侠帮帮忙喔不胜感激!
      

  10.   

    不知你是怎么做的,如果仅写入字符串之类的东西,如下就能实现。
    BOOL CHIDUSBCtrl::Write(const VARIANT FAR& Data) 
    {
    // TODO: Add your dispatch handler code here
    COleVariant val(Data);
    CString str;
    if(val.vt == VT_BSTR)
    {
           str = val.bstrVal;
                 AfxMessageBox(str);//在VB中会显示这个字符串的。
             }
    return TRUE;
    }
    这里仅处理了接收数据并保存到本函数中的过程。
      

  11.   

    注意这里仅对传入的字符中没有NULL字符的情况,否则第一个NULL后的没有。