types - BSTR,如何制作自己的?

标签 types bstr

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

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

谢谢

最佳答案

这对你来说可能很有趣:

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

关于types - BSTR,如何制作自己的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3451918/

相关文章:

java - ODBC 到 JDBC 数据类型的映射

typescript - 在 typescript 中将枚举类型作为参数传递

c - VB6中如何从指针获取字符串

java - 常见做法是什么?类型放置

haskell - 如何在 Julia 中创建新类型?

visual-c++ - 使用::SysFreeString() 释放 BSTR。更依赖于平台?

c++ - VBA/Excel 和 C++ DLL,特别是字符串问题

c++ - 使用 BSTR 数据类型时出错

c++ - MSXML 方法是否获取其 BSTR 参数的内存所有权?

java - Java 中泛型类型的子类