小编lin*_*s77的帖子

在头和源中创建C++命名空间(cpp)

在命名空间中包装header和cpp文件内容,或者只包装头内容然后在cpp文件中使用命名空间之间有什么区别吗?

差异我的意思是任何排序性能损失或稍微不同的语义,可能会导致问题或我需要注意的任何事情.

例:

// header
namespace X
{
  class Foo
  {
  public:
    void TheFunc();
  };
}

// cpp
namespace X
{
  void Foo::TheFunc()
  {
    return;
  }
}
Run Code Online (Sandbox Code Playgroud)

VS

// header
namespace X
{
  class Foo
  {
  public:
    void TheFunc();
  };
}

// cpp
using namespace X;
{
  void Foo::TheFunc()
  {
    return;
  }
} 
Run Code Online (Sandbox Code Playgroud)

如果没有差异,首选形式是什么?为什么?

c++ namespaces

81
推荐指数
3
解决办法
8万
查看次数

以C++编程方式创建Excel文件

我看过程序以两种不同的方式导出到Excel.

  1. 打开Excel并逐个单元格输入数据(当它运行时看起来像一个宏工作)
  2. 在磁盘上创建Excel文件并将数据写入文件(如MS Access中的导出功能)

1号速度非常慢,对我来说这简直太可怕了.

2号是我需要做的.我猜我需要某种SDK,以便我可以用C++创建Excel文件.

  1. 我是否需要.xls和.xlsx的不同SDK?
  2. 我从哪里获得这些?(我已经尝试了谷歌搜索,但我发现的SDK看起来像他们做的其他事情,而不是提供创建Excel文件的界面).
  3. 说到运行时,MS Office是否需要在PC上创建需要创建Excel文件,或者您是否获得了可以与可执行文件一起部署的可再发行DLL?

c++ excel sdk

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

使用std :: bind和boost :: signals2是否安全?

使用std :: bind将成员函数传递给boost :: signals2 :: signal :: connect()是否安全?换句话说,boost :: bind和std :: bind是否可以互换?

它用VC++ 2010 SP1编译,但模板代码远远超过我的头脑,我担心我可能冒险进入未定义的行为领域.

c++ boost signals bind member-functions

6
推荐指数
1
解决办法
1297
查看次数

使用Windows输入原始鼠标

阅读这篇文章"利用高清鼠标移动" - http://msdn.microsoft.com/en-us/library/windows/desktop/ee418864(v=vs.100).aspx,我猜想一个应该使用原始输入从输入设备获得更精确的读数.

文章指出WM_MOUSEMOVE的主要缺点是它仅限于屏幕分辨率.

仔细检查RAWMOUSE结构后,我看到lLastX和lLastY是长值,你可以通过它们得到delta.

对我来说,看起来WM_MOUSEMOVE和WM_INPUT是相同的,除了使用WM_INPUT你没有应用加速度(指针弹道).

WM_MOUSEMOVE和WM_INPUT是否仅限于屏幕分辨率?

如果是这样,使用WM_INPUT有什么好处?

c++ windows mouse winapi

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

非阻塞ConnectNamedPipe事件未收到信号

我开始使用命名管道,需要在两个本地进程之间使用它们进行IPC.我在非阻塞重叠模式下使用管道服务器和客户端进程.

一切正常(服务器成功接收客户端发送的字符串),除了通过OVERLAPPED结构传递给ConnectNamedPipe()的事件没有按预期发出信号(当客户端连接时发出信号).

当服务器在WaitForSingleObject()上被阻塞时,调用连接到管道的客户端进程,发送其数据并终止,但事件未发出信号.我错过了什么?

服务器代码:

HANDLE hPipe = ::CreateNamedPipeW(
    L"\\\\.\\pipe\\ThePipe",
    PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
    PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_NOWAIT,
    1,
    4096,
    4096,
    100,
    nullptr);

OVERLAPPED ov = {0};
ov.hEvent = ::CreateEventW(nullptr, TRUE, FALSE, nullptr);

BOOL retVal = ::ConnectNamedPipe(hPipe, &ov);

if (retVal == 0)
{
    DWORD err = ::GetLastError();
    if (err == ERROR_IO_PENDING)
    {
        ::WaitForSingleObject(ov.hEvent, 30000);
    }
    if (err == ERROR_PIPE_LISTENING)
    {
        ::WaitForSingleObject(ov.hEvent, 30000);    // this blocks until time-out???
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ windows events winapi named-pipes

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

DLL和编译器设置

许多文章和帖子警告编译器设置在链接和使用DLL时可能导致不兼容.

如果您在使用C++编写DLL时遵循最佳实践并使用extern"C"导出函数并仅使用POD数据类型或坚持使用接口(纯虚拟)类,那么可能导致问题的编译器设置是什么?

您如何知道哪些编译器设置会导致问题?不同的编译器会有不同的设置吗?是否有可用的Visual C++编译器设置列表?

c++ compiler-construction dll linker visual-c++

4
推荐指数
1
解决办法
224
查看次数