質問

設定:
していまCOM DLLる方法内部管理C#DLL.この機能を返しますC#string[]配列は、整列化をSAFEARRAY.

問題点:
またアクセスの文字列内のsafearrayだけの最初のcharの文字列になります。なぜですか?

コード:

    // 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);
    }

コ皆さまのご協力のもと、
-ショーン!

役に立ちましたか?

解決

BSTRは、Unicode文字列であるので、あなたはwchar_tバッファとwsprintf_sを使用する必要があります。今uが最初のUnicode文字のANSIの一部はその後、\ 0で停止し印刷します。そして、その(原文のまま!)のようなスタックオーバーフローしないでくださいしてください。それが今であるとu'll pwnedするように安全_vsnwprintf_s_lとその家族を使用して、あなたのコードは、ハッカーの喜びです。 http://msdn.microsoft.com/en-を参照してください。私たち/ライブラリ/ d3xd30zz(VS.80).aspxの

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top