3

bstr データを使用するサーバーに Linux アプリを接続する必要があります。自分のコードを「ロール」して bstr を作成できますか? 私はbstrの基本を知っています。それには、バイトサイズからnullターミネータを差し引いたヘッダーがあり、ヘッダーのために、文字列の途中にnullを含めることができ、基本的にbstrに従う残りのすべてのルールを含めることができます。

ヘッダーのバイト順や、comのようにヘッダーまたは5番目のバイトを指すデータを渡すなど、より詳細な詳細についてはわかりませんか?この情報をどこで入手できるか、またはLinux用のbstr型クラスを書いた人はいますか? または、一般的に、Microsoft ライブラリに基づく一般的な概要ではなく、bstr の詳細に関する情報をどこで見つけることができますか?

ありがとう

4

1 に答える 1

4

これはあなたにとって興味深いかもしれません:

Eric の BSTR セマンティクスの完全ガイド

編集:その記事から収集されたいくつかの詳細:

免責事項: これは私の思いつきであり、因果関係の破壊と既知の宇宙の終焉に至るまで、重大な誤りが含まれていますが、これに限定されません。

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 などを使用する必要があることに注意してください。

于 2010-08-10T17:57:21.117 に答える