Linux中的LARGE_INTEGER和BYTE类型?

时间:2015-06-29 10:05:54

标签: linux windows

我正在学习一个转换为Linux的Windows代码和这个答案here。 Linux中的LARGE_INTEGER和BYTE之间可能没有内射数据类型,因此可能需要考虑特殊情况。

这两种数据类型可能会被Linux中的以下两种替换

  • uint64_t
  • unsigned char

其中第一个是stdint.h的一部分。 我建议用uint64_t替换LARGE_INTEGER和BYTE但不确定。

可以使用哪些Linux数据类型代替LARGE_INTEGER和BYTE?

以下文件是National Instruments' MCA 8000A的驱动程序描述了here

MictoTime.h

//////////////////////////////////////////////////////////////////////
//
// MicroTime.h: interface for the MicroTime class.
//
// This header file is a part of the PMCA COM package
//
// Amptek Inc. 2000
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_MICROTIME_H__495147C7_F0B7_11D1_B62F_9CFF0CC10000__INCLUDED_)
#define AFX_MICROTIME_H__495147C7_F0B7_11D1_B62F_9CFF0CC10000__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000

class MicroTimeType  
{
    LARGE_INTEGER m_startTime;
    double m_microScale;
    BOOL m_waiting;
public:
    MicroTimeType();
    LARGE_INTEGER GetCounter();
    double Get(void);
    double Wait(double microSec);
    void CancelWait(void);
};

#endif // !defined(AFX_MICROTIME_H__495147C7_F0B7_11D1_B62F_9CFF0CC10000__INCLUDED_)

您是否需要在此处添加此answer的新类型? 您是否需要在其他地方定义uint8_t

1 个答案:

答案 0 :(得分:4)

对于Windows API和工具链支持的C中的数据类型,您可以看到the reference

LARGE_INTEGER实际上是一个表示已签名的64位整数的联合,这种联合历来在某些API中使用。简单的typedef int64_t LARGE_INTEGER;无法按预期工作。

你需要这样的东西:

#include <stdint.h>

typedef uint8_t BYTE;
typedef uint32_t DWORD;
typedef int32_t LONG;
typedef int64_t LONGLONG;

typedef union _LARGE_INTEGER {
  struct {
    DWORD LowPart;
    LONG  HighPart;
  };
  struct {
    DWORD LowPart;
    LONG  HighPart;
  } u;
  LONGLONG QuadPart;
} LARGE_INTEGER, *PLARGE_INTEGER;