gpt4 book ai didi

c# - 等价于 C# 的 C++ typedef 结构

转载 作者:行者123 更新时间:2023-11-27 22:48:16 28 4
gpt4 key购买 nike

我正在处理一个需要与 DLL 通信的项目。提供的 SDK 在 C++ 中有一个演示项目,它使用上面的 typedef 结构从 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# 中使用这种转换后的结构,但数据未进入正确的变量名称可能是由于缺少 *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++ 中表示至少 32 位,但在 C#* 中表示严格 64 位。对齐方式也可能不同,因为您没有在任何一种语言中明确指定它。

简而言之,您需要使用等效类型并确保对齐方式完全相同才能使映射正常工作。它与“丢失的 *LPTRACKIRDATA”无关。

*问题最初用 C# ulong 代替 uint

关于c# - 等价于 C# 的 C++ typedef 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40775290/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com