设计Win32api应用程序

时间:2015-09-02 22:36:20

标签: c++ winapi c++11

我对C ++很陌生,我阅读的问题越多。

我想将我的旧C代码(它列出机器上的设备)转换为设计良好的C ++代码。

正如我所读到的,C ++最基本的概念之一是容器,迭代器和算法的隔离。 也就是说,我得出的结论是我应该创建3个类:

  1. DeviceInterface - 保存单个接口信息,例如SP_DEVICE_INTERFACE_DATA,PSP_DEVICE_INTERFACE_DETAIL_DATA和SP_DEVINFO_DATA

  2. DevicesInterfaceContainer - 以某种方式以DeviceInterface类的形式保存所有设备信息的容器。

  3. DeviceInterfaceIterator - 由算法用于迭代DevicesInterfaceContainer中的项目。

  4. 我没有设法实现它,因为我不确定如何。

    1. 迭代器应该是初始化DevicesInterfaceContainer的输出迭代器吗?或者DevicesInterfaceContainer是否应该自己初始化并获取所有设备?

    2. 当Win32 api在构造函数中失败时会发生什么?我应该抛出异常吗?如果是这样,有什么样的例外?的std ::例外?的std :: runtime_error?或者我应该定义我自己的Win32Exception,其中包含有关LastError的信息? (我需要的只是格式化消息的最后一个错误。)

    3. 类似的东西:

      class DeviceInterfacesList
      {
      public:
          DeviceInterfacesList(GUID& rtInterfaceGuid)
          {
              m_hDevInfo = SetupDiGetClassDevs(
                  &rtInterfaceGuid,
                  NULL,
                  NULL,
                  DIGCF_DEVICEINTERFACE
              );
              if (INVALID_HANDLE_VALUE == m_hDevInfo)
              {
                  throw Win32Exception();
              }
          }
      
          ...
          ...
          ...
      
          HDEVINFO m_hDevInfo;
      };
      

      我很乐意为使用STL + win32api或任何可以澄清我的问题的内容提供一些指导/好的更新示例。

      提前致谢。

1 个答案:

答案 0 :(得分:-1)

如果您想使用C ++ STL,问题可能比您想象的要容易。 首先,您需要设计一个类来保存必要的信息, 那就是“DeviceInterface”。您可以定义此类的成员和函数。

您可以使用STL容器,例如deque或list作为容器。代码就像:

deque<DeviceInterface> DIList;

对于迭代器,C ++ STL为您提供了使用它的标准方法:

for(auto it = DIList.begin(); it != DIList.end; ++it){
    *it->getData();
}

我希望这可以帮到你。