###環境
Windows10 64bit
Visual Studio 2019
C++17
###知りたいこと
以下条件にてIDispatch::InvokeでE_OUTOFMEMORY Ran out of memory.が返される原因が知りたい。
###条件
C++
1// disp = エクセルのWorkbooksのIDispatch。 2// dispid = Workbooks.OpenのDISPID。 3// disp_params = VARIANT型の変数。vt = VT_BSTR / bstrVal = Open対象のブックのパス。 4// result = 初期化されたVARIANT型の変数。 5HRESULT hr = disp->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &disp_params, result, nullptr, nullptr);
上記のコードで、disp_params.bstrValを以下の様に設定した場合にE_OUTOFMEMORY Ran out of memory.が返される。
C++
1// path = std::wstring型の変数。 2disp_params.bstrVal = path.data();
###補足
以下の様に設定した場合はS_OKが返される。
C++
1// path = std::wstring型の変数。 2disp_params.bstrVal = SysAllocString(path.c_str());
いずれの場合もdisp_params.bstrValはwchar_t*型の値が期待通りに格納されており、
いずれの場合もプログラムは実行可能です。
こちらで似た様な事象がマーシャリング起因ではないかという記述を見つけましたが、具体的にどういうことか理解できません。
何か思い当たることがあればご教示下さい。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/16 06:32