Types BSTR,如何制作自己的?

Types BSTR,如何制作自己的?,types,bstr,Types,Bstr,我需要将Linux应用程序连接到使用bstr数据的服务器。我可以“滚动”自己的代码来生成bstr吗?我知道BSTR的基础知识,它有一个带有字节大小减去null终止符的头,因为它可以在字符串中间包含null,基本上所有遵循BSTR的规则。 我不确定标题的字节顺序或更详细的细节,例如我是否像com一样传递指向标题或第5个字节的数据?是否有人知道我可以从哪里获得这些信息,或者是否有人已经为linux编写了bstr类型的类?或者在一般情况下,我可以在哪里找到有关bstr详细信息,而不仅仅是基于Micro

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

我不确定标题的字节顺序或更详细的细节,例如我是否像com一样传递指向标题或第5个字节的数据?是否有人知道我可以从哪里获得这些信息,或者是否有人已经为linux编写了bstr类型的类?或者在一般情况下,我可以在哪里找到有关bstr详细信息,而不仅仅是基于Microsoft LIB的一般概述


谢谢

您可能会感兴趣:

编辑:从那篇文章中收集到更多细节:

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

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等来代替此代码。

谢谢,实际上MSDN上有一篇文章反映了这一点,不知道是谁复制了谁。这有帮助,但我仍然需要较低级别的详细信息。哈哈,对不起,这是msdn上的同一篇文章,我今天筋疲力尽了。好吧,我不知从哪里找到了一些代码,并将其添加到了我的答案中。但是,我不保证它是否正确。谢谢,我会仔细看一下,这是我要找的细节。谢谢!为什么计数短?我以为头是4字节?这个。我只看记忆,这是真的。