remove the dependency of ole32.lib
This commit is contained in:
		
							parent
							
								
									a120447716
								
							
						
					
					
						commit
						d6590f88b0
					
				| @ -128,6 +128,8 @@ namespace detail | ||||
| 		public: | ||||
| 			co_initializer(); | ||||
| 			~co_initializer(); | ||||
| 
 | ||||
| 			void task_mem_free(void* p); | ||||
| 		private: | ||||
| 			HMODULE ole32_; | ||||
| 		}; | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| @ -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) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jinhao
						Jinhao