如何将字符串发送到com接口中的方法?

时间:2012-03-13 10:14:06

标签: c# c++ com-interop

    cVector3d newPosition = tool->getDeviceGlobalPos();
    char sendBuf[sizeof(double)*3 + 1];
    int sendBufLen = sizeof(double)*3 + 1;

     memset( (void *)&sendBuf, '\0', sizeof(sendBuf));
    memcpy(&sendBuf, &newPosition[0], sendBufLen -1);

其中cpi是指向com接口对象的指针。 Multicast是一种接受字符串参数的c#方法。 当我打印Multicast收到的message.length时,即sendBuf,它只是说2而不是24。

cvector3d http://www.chai3d.org/doc/structc_vector3d.html

的参考资料

cpi->Multicast(sendBuf);出了什么问题?

- 编辑 - 我需要将sendBuf转换为_bstr_t我认为

我转换为_bstr_t但是message.length仍然显示2而不是24?

我用过

_bstr_t bstrt(sendBuf);

我猜bstr已损坏,因为我在调试时看到BAD PTR中的bstr->m_data->m_str


---- ----编辑 我转换的 “123456789012378901234”

char sendBuf[sizeof(double)*3 + 1];
memcpy(&sendBuf, "123456789012345678901234", sendBufLen -1);
_bstr_t bstrt(sendBuf);

bstrt有“123456789012378901234”

但是当我在sendBuf中有奇怪的字符时,例如。 sendBuf [14] = "16 'ð' "我的程序需要bstr不会从sendBuf获取这些值

为什么?

3 个答案:

答案 0 :(得分:1)

如您的编辑所示,请查看_bstr_t

答案 1 :(得分:0)

_bstr_t bstrt(sendBuf);
cpi->Multicast(bstrt);

答案 2 :(得分:0)

你无法做到这一点。您正在将二进制数据复制到字符串中。在.NET端,char []被封送到.NET字符串,这是一个通过应用系统默认语言环境转换的char []的utf-16编码版本。哪个更改 char值。还有更多,你复制到char []的字节可能包含零,它在C字符串中充当字符串终止符。

您需要重写C#版本以取代byte []。在C端,您需要创建一个SAFEARRAY来匹配该参数。使用SafeArrayCreate()创建它。