0

セットアップ:
マネージドC#DLL内のメソッドを呼び出すCOMDLLがあります。この関数は、SAFEARRAYにマーシャリングされるC#string[]配列を返します。

問題:
safearray内の文字列にアクセスしようとすると、文字列の最初の文字しか取得されません。私は何が間違っているのですか?

コード:

    // Pointer to the managed interface
    DatabasePtr pODB(__uuidof(DBClass));

    // Get the string[] array from the managed method
    SAFEARRAY* safearray = pODB->GetStringArray();

    HRESULT hresult;

    long ubound;
    long lbound;

    hresult = SafeArrayGetUBound(safearray, 1, &ubound);
    hresult = SafeArrayGetLBound(safearray, 1, &lbound);

    long index;
    BSTR fromarray;

    for (; lbound <= ubound; lbound++)
    {
        index = lbound;

        hresult = SafeArrayGetElement(safearray, &index, (void*)&fromarray);

        char buffer[512];
        sprintf_s(buffer,"%s",fromarray);

        MessageBox(0, (LPCSTR)buffer, "...", 0);
    }

助けてくれてありがとう、
-Sean!

4

1 に答える 1

2

BSTR は Unicode 文字列であるため、wchar_tバッファとwsprintf_s. 現在、最初の Unicode 文字の ANSI 部分を印刷し、\0 で停止します。そして、どうか、そのようにスタック オーバーフローしないでください (原文のまま!)。金庫_vsnwprintf_s_lとそのファミリーを使用してください。あなたのコードは今のままでハッカーの喜びであり、あなたは盗まれます. http://msdn.microsoft.com/en-us/library/d3xd30zz(VS.80).aspxを参照してください。

于 2009-05-17T23:27:28.457 に答える