我正在学习一个转换为Linux的Windows代码和这个答案here。 Linux中的LARGE_INTEGER和BYTE之间可能没有内射数据类型,因此可能需要考虑特殊情况。
这两种数据类型可能会被Linux中的以下两种替换
其中第一个是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
?
答案 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;