Как отправить строку в метод в интерфейсе ком? - PullRequest
2 голосов
/ 13 марта 2012
    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 - это метод ac #, который принимает строковые аргументы.Когда я печатаю message.length, полученное Multicast, то есть sendBuf, он просто говорит 2 вместо 24.

ссылка для cvector3d http://www.chai3d.org/doc/structc_vector3d.html

что не так с cpi->Multicast(sendBuf);?

- edit-- Мне нужно конвертировать sendBuf в _bstr_t. Я думаю

Я конвертировал в _bstr_t, но длина сообщения все равно показывает 2 вместо 24?

Я использовал

_bstr_t bstrt(sendBuf);

Я полагаю, что bstr поврежден, так как при отладке я вижу BAD PTR в bstr->m_data->m_str


---- edit ---- Когда я конвертирую "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 ]

1 голос
/ 13 марта 2012

Как показывает ваше редактирование, посмотрите _bstr_t .

0 голосов
/ 13 марта 2012

Вы не можете сделать эту работу.Вы копируете двоичные данные в строку.На стороне .NET char [] маршалируется в строку .NET, кодированную в кодировку utf-16 версию char [], которая конвертируется с применением системного языкового стандарта по умолчанию.Который меняет значения char.Более того, байты, которые вы копируете в char [], могут содержать ноль, он действует как ограничитель строк в строках C.

Вам нужно переписать версию C #, чтобы вместо нее взять байт [].На стороне C вам нужно создать SAFEARRAY, чтобы соответствовать этому аргументу.Используйте SafeArrayCreate () для его создания.

0 голосов
/ 13 марта 2012
_bstr_t bstrt(sendBuf);
cpi->Multicast(bstrt);
...