我想将调用转发到具有可变方法的库.我能提出来复制问题的最简单的例子是:
void Bar(int useless, ...)
{
//Does something
}
template<typename... Args>
void Foo(int useless, Args... args)
{
Bar(useless, args...);
}
Run Code Online (Sandbox Code Playgroud)
如你所见,我已经去了.但是,即使这个编译,它似乎导致堆栈有一个摇摆,我看到应用程序退出时出错.从编译器的角度来看,我可以理解这个解决方案存在问题.
我不确定如何使这个工作,或者是否有可能让这个工作.我看到有些人建议在类似情况下使用"索引技巧",但我无法在这个特殊场合使用它.
任何帮助赞赏!
我试图在Windows 7上使用Visual Studio 2013 64位构建Live555的组件.
我已经尝试编辑win32config和*.mak文件但没有成功.我一直在互联网上搜索几个小时,并通过命令提示尝试各种各样的事情.
由于某种原因,VS2013 x64命令提示符仍在构建32位静态库,我无法弄清楚原因.
如果有人有任何好主意,那就太棒了!
我有一个应用程序使用原始输入做一些复杂的事情,我想有一些自动化测试.这是发送输入的代码,虽然有点切碎,以便更容易理解.
发送:
GetRawInputDeviceList(nullptr, &numDevices, sizeof(RAWINPUTDEVICELIST));
rawInputDeviceList = new RAWINPUTDEVICELIST[numDevices];
GetRawInputDeviceList(rawInputDeviceList, &numDevices, sizeof(RAWINPUTDEVICELIST));
HGLOBAL hRaw = ::GlobalAlloc(GHND, sizeof(RAWINPUT));
RAWINPUT *pRaw = reinterpret_cast<RAWINPUT*>(::GlobalLock(hRaw));
pRaw->data.keyboard.MakeCode = 30;
pRaw->data.keyboard.Flags = 0;
pRaw->data.keyboard.Reserved = 0;
pRaw->data.keyboard.VKey = 0x43;
pRaw->data.keyboard.Message = WM_KEYDOWN;
pRaw->data.keyboard.ExtraInformation = 0;
pRaw->header.dwType = RIM_TYPEKEYBOARD;
pRaw->header.dwSize = sizeof(RAWINPUT);
pRaw->header.hDevice = rawInputDeviceList[0].hDevice;
pRaw->header.wParam = (WPARAM)RIM_INPUT;
::GlobalUnlock(hRaw);
SendMessage(hWnd_, WM_INPUT, (WPARAM)RIM_INPUT, (LPARAM)hRaw);
Run Code Online (Sandbox Code Playgroud)
接收:
case WM_INPUT:
UINT size = 0;
if(GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &size, sizeof(RAWINPUTHEADER)))
return GetLastError();
Run Code Online (Sandbox Code Playgroud)
GetLastError()的返回值是ERROR_INVALID_HANDLE(6).但是,如果我自己使用GlobalLock,我可以读取句柄.
根据http://msdn.microsoft.com/en-us/library/windows/desktop/ms645596(v=vs.85).aspx"lParam:RAWINPUT 结构的句柄.这来自WM_INPUT中的lParam. "
我试过只使用指针,我得到相同的错误信息.我已尝试使用/不使用解锁,以及使用LocalAlloc/LocalLock.我已经尝试过使用PostMessage而且结果完全相同,而且我现在已经没想到了.