掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
dllで文字列配列を戻し、取得するには (ID:63675)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
OS:WinXPPro SP2 VC++.NET dllで文字列配列を戻し、他のexeで受取る方法が 分からなくて困っています。 dllでsplit関数を作成し、使用したいのですが... (dll側) extern "C" __declspec(dllexport) SAFEARRAY* __stdcall getSplitText(LPCTSTR pszTarget, LPCTSTR pszDelimiter); extern "C" __declspec(dllexport) SAFEARRAY* __stdcall getSplitText(LPCTSTR pszTarget, LPCTSTR pszDelimiter) { ///// 配列を用意 CStringArray* arrResult = new CStringArray(); int nDelimiter; int nStart; int nEnd; CString strTarget = pszTarget; CString strDelimiter = pszDelimiter; strTarget = strTarget + strDelimiter; nDelimiter = strDelimiter.GetLength(); nStart = 0; while(nEnd = strTarget.Find(strDelimiter, nStart), nEnd >= 0) { arrResult->Add(strTarget.Mid(nStart, nEnd - nStart)); nStart = nEnd + nDelimiter; } SAFEARRAY* pSa; SAFEARRAYBOUND bound; bound.cElements = (ULONG)arrResult->GetSize(); bound.lLbound = 0; pSa = SafeArrayCreate(VT_BSTR, 1, &bound); // SAFEARRAYにアクセスする. LPCTSTR* sArray; SafeArrayAccessData(pSa, (void**)&sArray); for(int i = 0; i < arrResult->GetSize(); i++) { sArray[i] = arrResult->operator [](i); } SafeArrayUnaccessData(pSa); delete arrResult; return pSa; } (exe側) typedef SAFEARRAY* (__stdcall *DISPLAYMESSAGE)(LPCTSTR, LPCTSTR); void CTest2View::OnBnClickedButton2() { HINSTANCE hDllInstance; DISPLAYMESSAGE Split; // 関数アドレス hDllInstance = ::LoadLibrary("D:\\xxx\\yyy\\ComProc.dll"); if( hDllInstance != NULL ) { // エクスポートされた関数のアドレスを取得 Split = (DISPLAYMESSAGE)(::GetProcAddress(hDllInstance, "getSplitText")); if( Split != NULL ) { CStringArray* arrResult = new CStringArray(); SAFEARRAY* pSa; pSa = Dll_TestMessageBox("123,456,789", ","); // SAFEARRAYにアクセスする. LPCTSTR* sArray; SafeArrayAccessData(pSa, (void**)&sArray); for(int i = 0; i < 3; i++) { arrResult->Add(sArray[i]); } SafeArrayUnaccessData(pSa); AfxMessageBox(arrResult->operator [](0)); delete arrResult; } } FreeLibrary(hDllInstance); } だとアクセス違反になります。 SAFEARRAYからの取り出し方に問題があるのでしょうか? よろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.