BSTR,如何制作自己的?

时间:2010-08-10 17:55:12

标签: types bstr

我需要将Linux应用程序连接到使用bstr数据的服务器。我可以“滚动”我自己的代码来制作一个bstr吗?我知道bstr的基础知识,它有一个字节大小减去空终止符的头,因为它可以在字符串中间包含空值,基本上所有其余的规则都遵循bstr。 / p>

我不确定字节排序标题或更多私密细节,例如我是否指向标题或第5个字节,如com那样传递数据?有谁知道我可以在哪里获得这些信息,或者是否有人为linux编写了一个bstr类型的类?或者一般来说,我可以在哪里找到有关bstr详细信息的信息,而不仅仅是基于Microsoft库的一般概述?

由于

1 个答案:

答案 0 :(得分:4)

这对你来说很有意思:

Eric's Complete Guide To BSTR Semantics

编辑:从该文章中收集到的更多细节:

免责声明:这不是我的头脑,而且我包含严重错误,但不限于因果关系的破坏和已知宇宙的终结。

struct BSTR_data {
    short count;
    wchar_t[] data;
};

typedef wchar BSTR;

BSTR * AllocateBSTR(wchar * str) {
    if(str == 0) return 0;

    short len = wstrlen(str);

    BSTR_data * ret = new char[sizeof(short) + (sizeof(wchar_t) + 1) * len];

    ret->count = len;

    memcpy(ret->data, str, sizeof(wchar_t) * 2 * len);

    ret->data[len] = 0;

    return (BSTR *)(ret + sizeof(short));
}

void DeallocateBSTR(BSTR * str) {
    if(str == 0) return;

    BSTR_data * bstr = (BSTR_data*)(str - sizeof(short));

    delete bstr;
}

这应该可以让您了解正在发生的事情。请注意,如果与Win32的交叉可比性非常重要,则需要使用SysAllocString等代替此代码。