标签:自己 c++ prime ati ESS log wchar delete char* prim
花两周通读了一遍《C++ Primer》,积攒的疑惑一扫而光。
利用C++11可变模板,封装调用dll导出函数
本以为已经很好用了,最近抽时间巩固下知识体系,发现自己道行不够!
充分利用函数模板的实参推断,取得了“近似动态语言”的使用体验。
#include <windows.h>
class WinDll
{
public:
WinDll(const char* dll) : mLib(::LoadLibraryA(dll)) {}
WinDll(const wchar_t* dll) : mLib(::LoadLibrary(dll)) {}
~WinDll() { FreeLibrary(mLib); }
WinDll(const WinDll&) = delete;
WinDll& operator=(const WinDll&) = delete;
operator bool() { return !!mLib; }
template <typename Ret, typename... Args>
Ret Invoke(const char* name, const Args& ...args)
{
auto proc = GetProcAddress(mLib, name);
typedef Ret(__stdcall* Func)(Args...);
return (proc) ? reinterpret_cast<Func>(proc)(args...) : (Ret());
}
private:
HMODULE mLib;
};
int main()
{
WinDll user32("user32");
if (user32) {
user32.Invoke<int>("MessageBoxA", 0, 0, 0, 0);
user32.Invoke<int, HWND, LPCWCHAR, LPCWCHAR>("MessageBoxW", NULL, L"Hello World!", L"Demo", MB_ICONINFORMATION | MB_OK);
}
}
C++的语义细品之后,如此简单!
都怪自己多年来只顾解决项目问题,忽略了最基础的语义内涵!
标签:自己 c++ prime ati ESS log wchar delete char* prim
原文地址:https://www.cnblogs.com/wuyaSama/p/12452688.html