BSTR好像只能处理字符串, BYTE数组中的值取值范围0~255;
用VARIANT好像杀鸡用牛刀;(注:ocx是给任意语言使用的)

解决方案 »

  1.   

    BSTR
    (1).
    BSTR   bstr   =   SysAllocStringByteLen((char*)buf,   1024);(2).
    memcpy(buf,   (LPVOID)bstr,   1024);
      

  2.   

    to zhoujianhei:
    那样行好像太行吧?
    原因:
    我的控件是接收, 
    在控件接口中定义如此:[id(4)] long Login(BSTR LoginName, BSTR Passwd);
    而在CXXXCtrl中,VC生成的代码却是: long CXXXCtrl::Login(LPCTSTR LoginName, LPCTSTR Passwd);
    这样, 我根本不知道Passwd的长度(Passwd是经过加密的, 不是字符串)to akirya:
    SafeArray好像一定要封装到VARIANT中才行吧?
      

  3.   

    使用MFC?
    要是ATL的话实际代码中就是BSTR
    mfc没用过,看你的情况应该是mfc库里面转化了
    刚才找了一下SafeArray的确得在VARIANT
      

  4.   

    1楼方案可行。
    BSTR的处理跟普通字符串处理是不同的,在BSTR指向的内存中有一个4字节的前缀(正好在BSTR之前)表示这个BSTR的长度,系统处理BSTR根本不看内容中是否有空结束符,而是用这个长度值,所以在BSTR中能存放任意二进制数据。
      

  5.   

    谢谢各位, 问题以比较明朗了:
    1楼方案可行;至于VC在CXXXCtrl中,VC生成的代码却是:   long   CXXXCtrl::Login(LPCTSTR   LoginName,   LPCTSTR   Passwd); 
    jameshooo兄, 以在另一帖回复我了, 可以将LoginName强制转换为BSTR, 并利用API可以获得BSTR的长度;再次谢谢各位仁兄了!