等效于C Typedef struct与C#
Equivalent of C++ typedef struct to C#
我正在研究一个需要与DLL通信的项目。提供的SDK在C 中具有一个演示项目,它使用上述Typedef struct从DLL中重新读取数据,并且它运行良好,但我必须做同样的事情,但是在C#中,我尝试创建一个类似的结构dll我的结构以不同的顺序填充。
typedef struct tagTrackIRData
{
unsigned short wNPStatus;
unsigned short wPFrameSignature;
unsigned long dwNPIOData;
float fNPRoll;
float fNPPitch;
float fNPYaw;
float fNPX;
float fNPY;
float fNPZ;
float fNPRawX;
float fNPRawY;
float fNPRawZ;
float fNPDeltaX;
float fNPDeltaY;
float fNPDeltaZ;
float fNPSmoothX;
float fNPSmoothY;
float fNPSmoothZ;
} TRACKIRDATA, *LPTRACKIRDATA;
问题在于我在上面的C#中收到的结构,但是我无法在C#中以相同的结构格式分配(结构来自C DLL,我的程序称其在C#中)。我试图在C#中使用这种转换的struct,但数据并未涉及正确的变量名称,可能是由于缺少的 *lptrackirdata。
。struct TRACKIRDATA
{
public ushort wNPStatus;
public ushort wPFrameSignature;
public ulong dwNPIOData;
public float fNPRoll;
public float fNPPitch;
public float fNPYaw;
public float fNPX;
public float fNPY;
public float fNPZ;
public float fNPRawX;
public float fNPRawY;
public float fNPRawZ;
public float fNPDeltaX;
public float fNPDeltaY;
public float fNPDeltaZ;
public float fNPSmoothX;
public float fNPSmoothY;
public float fNPSmoothZ;
}
我使用此代码在C#中调用DLL:
TRACKIRDATA tid;
NPRESULT gdRes = getData(&tid);
getData()是
private delegate NPRESULT NP_GetData(TRACKIRDATA* data);
getData = (NP_GetData)Marshal.GetDelegateForFunctionPointer(procAddrNP_GetData, typeof(NP_GetData));
牢记整数类型并不意味着C 和C#中的相同内容。特别是,long
表示C 中的at least 32 bits
,但在C#*中表示strictly 64 bits
。一致性也可能有所不同,因为您没有用两种语言明确指定它。
简而言之,您需要使用等效类型,并确保对齐映射的工作完全相同。它与"失踪 *lptrackirdata"无关。
*这个问题最初具有C#ulong
代替uint
。
op的答案:
谢谢@asik你是对的!问题是由DWNPIODATA的错误类型引起的,因为在C 中长期使用的是32bits,并且在C#中是一个64BITS的大小。解决方案是使用C#中的UINT32类型
public uint dwNPIOData;
相关文章:
- C++:TypeDef使用元组
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- "typedef"类型名称是否可以像"struct"定义那样声明指向结构的指针?
- 错误:使用 tesseract 引擎时 C++ 中的声明'typedef struct tagBLOB BLOB'冲突
- typedef struct vs struct - "struct"的存储大小未知
- __stdcall typedef struct
- 在类中使用"typedef struct"
- What is struct NIL { typedef NIL Head; }?
- 等效于C Typedef struct与C#
- 如何在未知的Typedef struct和QbyTearray之间进行序列化和应序列化
- C++ typedef struct vs class
- 在C 中正确从C库中初始化Typedef struct
- 命名线程,使用 typedef/struct
- Xcode typedef 的 struct 创建错误/警告
- C++typedef中的struct关键字
- typedef struct 指针进入 JNA
- typedef如何代替Procedure c++的struct/class工作
- 在c++中使用C风格的struct/typedef