Merge branch 'develop'

This commit is contained in:
Jinhao 2018-06-27 04:28:06 +08:00
commit 3356898833
3 changed files with 19 additions and 6 deletions

View File

@ -3,8 +3,8 @@
* Nana C++ Library(http://www.nanapro.org)
* Copyright(C) 2003-2017 Jinhao(cnjinhao@hotmail.com)
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*
* @file: nana/detail/platform_spec.hpp
@ -128,6 +128,8 @@ namespace detail
public:
co_initializer();
~co_initializer();
void task_mem_free(void* p);
private:
HMODULE ole32_;
};

View File

@ -100,6 +100,18 @@ namespace detail
}
}
void platform_spec::co_initializer::task_mem_free(void* p)
{
if (ole32_)
{
using CoTaskMemFree_t = void (__stdcall *)(LPVOID pv);
CoTaskMemFree_t free_fn = reinterpret_cast<CoTaskMemFree_t>(::GetProcAddress(ole32_, "CoTaskMemFree"));
if (free_fn)
free_fn(p);
}
}
struct platform_spec::implementation
{
std::map<native_window_type, window_icons> iconbase;

View File

@ -16,6 +16,7 @@
#if defined(NANA_WINDOWS)
# include <windows.h>
# include "../detail/mswin/platform_spec.hpp"
# ifndef NANA_MINGW //<Shobjidl.h> isn't supported well on MinGW
# include <Shobjidl.h>
# else
@ -1247,7 +1248,7 @@ namespace nana
#ifdef NANA_WINDOWS
std::optional<folderbox::path_type> target;
::CoInitialize(nullptr);
nana::detail::platform_spec::co_initializer co_init;
#ifndef NANA_MINGW
IFileDialog *fd(nullptr);
HRESULT hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&fd));
@ -1294,11 +1295,9 @@ namespace nana
if (FALSE != SHGetPathFromIDList(pidl, folder_path))
target = folder_path;
CoTaskMemFree(pidl);
co_init.task_mem_free(pidl);
}
#endif
::CoUninitialize();
return target;
#elif defined(NANA_POSIX)