BSTR
(1).
BSTR bstr = SysAllocStringByteLen((char*)buf, 1024);
(2).
memcpy(buf, (LPVOID)bstr, 1024);
BSTR的处理跟普通字符串处理是不同的,在BSTR指向的内存中有一个4字节的前缀(正好在BSTR之前)表示这个BSTR的长度,系统处理BSTR根本不看内容中是否有空结束符,而是用这个长度值,所以在BSTR中能存放任意二进制数据。
至于VC在CXXXCtrl中,VC生成的代码却是: long CXXXCtrl::Login(LPCTSTR LoginName, LPCTSTR Passwd);
可以将LoginName强制转换为BSTR, 并利用API可以获得BSTR的长度;