[英]Equivalent of C++ typedef struct to C#
我正在開發一個需要與 DLL 通信的項目。 提供的 SDK 有一個 C++ 演示項目,它使用上述 typedef 結構從 DLL 中檢索數據,它運行良好,但我必須做同樣的事情,但在 C# 中,我嘗試創建一個類似的結構,但是當我調用DLL my struct 以不同的順序填充。
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));
OP的回答:
謝謝@Asik 你是對的! 該問題是由 dwNPIOData 的錯誤類型等價引起的,因為 C++ 中使用的 long 是 32 位,而在 C# 中它是 64 位大小。 解決方案是在 C#
public uint dwNPIOData;
使用類型 uint32public uint dwNPIOData;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.