我正在研究一个转换为 Linux 的 Windows 代码和这个答案 here . Linux 中 LARGE_INTEGER 和 BYTE 之间可能没有单射数据类型,因此可能需要考虑特殊情况。
这两种数据类型在 Linux 中可能被以下两种替代
- uint64_t
- 无符号字符
其中第一个是 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
?
最佳答案
可以看到the reference适用于 Windows API 和工具链支持的 C 语言数据类型。
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;
关于linux - Linux 中的 LARGE_INTEGER 和 BYTE 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31129200/