小编Chr*_*000的帖子

使用C++ 11将可变参数函数参数转换为可变参数函数

我想将调用转发到具有可变方法的库.我能提出来复制问题的最简单的例子是:

void Bar(int useless, ...)
{
  //Does something
}

template<typename... Args>
void Foo(int useless, Args... args)
{
  Bar(useless, args...);
}
Run Code Online (Sandbox Code Playgroud)

如你所见,我已经去了.但是,即使这个编译,它似乎导致堆栈有一个摇摆,我看到应用程序退出时出错.从编译器的角度来看,我可以理解这个解决方案存在问题.

我不确定如何使这个工作,或者是否有可能让这个工作.我看到有些人建议在类似情况下使用"索引技巧",但我无法在这个特殊场合使用它.

任何帮助赞赏!

c++ templates variadic c++11

5
推荐指数
1
解决办法
1477
查看次数

使用Visual Studio 2013构建64位Live555

我试图在Windows 7上使用Visual Studio 2013 64位构建Live555的组件.

我已经尝试编辑win32config和*.mak文件但没有成功.我一直在互联网上搜索几个小时,并通过命令提示尝试各种各样的事情.

由于某种原因,VS2013 x64命令提示符仍在构建32位静态库,我无法弄清楚原因.

如果有人有任何好主意,那就太棒了!

live555 visual-studio-2013

2
推荐指数
1
解决办法
4094
查看次数

在Windows上模拟原始输入

我有一个应用程序使用原始输入做一些复杂的事情,我想有一些自动化测试.这是发送输入的代码,虽然有点切碎,以便更容易理解.

发送:

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而且结果完全相同,而且我现在已经没想到了.

c++ windows input raw-input

0
推荐指数
1
解决办法
1707
查看次数