通運(C#)string[]配列は、COM DLL
質問
設定:
していま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のの
所属していません StackOverflow