C#
一种面向对象的类型安全的编程语言,它起源于 C 语言系列,包括对面向组件的编程的支持。
210 个问题
下面是源码
typedef struct {
unsigned int busType;
union {
struct {
unsigned int bitRate;
unsigned char sjw;
unsigned char tseg1;
unsigned char tseg2;
unsigned char sam;
unsigned char outputMode;
unsigned char reserved1[7];
unsigned char canOpMode;
} can;
struct {
unsigned int arbitrationBitRate;
unsigned char sjwAbr;
unsigned char tseg1Abr;
unsigned char tseg2Abr;
unsigned char samAbr;
unsigned char outputMode;
unsigned char sjwDbr;
unsigned char tseg1Dbr;
unsigned char tseg2Dbr;
unsigned int dataBitRate;
unsigned char canOpMode;
} canFD;
struct {
unsigned int activeSpeedGrade;
unsigned int compatibleSpeedGrade;
unsigned int inicFwVersion;
} most;
unsigned int status; // XL_FR_CHANNEL_CFG_STATUS_xxx
unsigned int cfgMode; // XL_FR_CHANNEL_CFG_MODE_xxx
unsigned int baudrate; // FlexRay baudrate in kBaud
} flexray;
struct {
unsigned char macAddr[6]; // MAC address (starting with MSB!)
unsigned char connector; // XL_ETH_STATUS_CONNECTOR_xxx
unsigned char phy; // XL_ETH_STATUS_PHY_xxx
unsigned char link; // XL_ETH_STATUS_LINK_xxx
unsigned char speed; // XL_ETH_STATUS_SPEED_xxx
unsigned char clockMode; // XL_ETH_STATUS_CLOCK_xxx
unsigned char bypass; // XL_ETH_BYPASS_xxx
} ethernet;
struct {
unsigned short channelDirection;
unsigned short res1;
union {
struct {
unsigned int bitrate;
unsigned int parity;
unsigned int minGap;
} tx;
struct {
unsigned int bitrate;
unsigned int minBitrate;
unsigned int maxBitrate;
unsigned int parity;
unsigned int minGap;
unsigned int autoBaudrate;
} rx;
unsigned char raw[24];
} dir;
} a429;
unsigned char raw[28];
} data;
} XLbusParams;
typedef struct s_xl_channel_config {
char name [XL_MAX_LENGTH + 1];
unsigned char hwType; //!< HWTYPE_xxxx (see
unsigned char hwIndex; //!< Index of the hardware
unsigned char hwChannel; //!< Index of the channel
unsigned short transceiverType; //!< TRANSCEIVER_TYPE_xxxx
unsigned short transceiverState; //!< transceiver state
unsigned short configError; //!<
unsigned char channelIndex; //!< Global channel index
XLuint64 channelMask; //!< Global channel mask
unsigned int channelCapabilities; //!< capabilities which are
unsigned int channelBusCapabilities; //!< what buses are
//!< activated (e.g.
// Channel
unsigned char isOnBus; //!< The channel is on bus
unsigned int connectedBusType; //!< currently selected bus
XLbusParams busParams;
unsigned int _doNotUse; //!< introduced for compatibility reasons since EM00056439
unsigned int driverVersion;
unsigned int interfaceVersion; //!< version of interface with driver
unsigned int raw_data[10];
unsigned int serialNumber;
unsigned int articleNumber;
char transceiverName [XL_MAX_LENGTH + 1]; //!< name for CANcab or another transceiver
unsigned int specialCabFlags; //!< XL_SPECIAL_CAB_XXX flags
unsigned int dominantTimeout; //!< Dominant Timeout in us.
unsigned char dominantRecessiveDelay; //!< Delay in us.
unsigned char recessiveDominantDelay; //!< Delay in us.
unsigned char connectionInfo; //!< XL_CONNECTION_INFO_XXX
unsigned char currentlyAvailableTimestamps; //!< XL_CURRENTLY_AVAILABLE_TIMESTAMP...
unsigned short minimalSupplyVoltage; //!< Minimal Supply Voltage of the Cab/Piggy in 1/100 V
unsigned short maximalSupplyVoltage; //!< Maximal Supply Voltage of the Cab/Piggy in 1/100 V
unsigned int maximalBaudrate; //!< Maximal supported LIN baudrate
unsigned char fpgaCoreCapabilities; //!< e.g.: XL_FPGA_CORE_TYPE_XXX
unsigned char specialDeviceStatus; //!< e.g.: XL_SPECIAL_DEVICE_STAT_XXX
unsigned short channelBusActiveCapabilities; //!< like channelBusCapabilities (but without core dependencies)
unsigned short breakOffset; //!< compensation for edge asymmetry in ns
unsigned short delimiterOffset; //!< compensation for edgdfde asymmetry in ns
unsigned int reserved[3];
} XL_CHANNEL_CONFIG;
typedef XL_CHANNEL_CONFIG XLchannelConfig;
typedef XL_CHANNEL_CONFIG *pXLchannelConfig;
typedef struct s_xl_driver_config {
unsigned int dllVersion;
unsigned int channelCount; // total number of channels
unsigned int reserved[10];
XLchannelConfig channel[XL_CONFIG_MAX_CHANNELS]; // [channelCount]
} XL_DRIVER_CONFIG;
您好,
嵌套的成员在其他地方声明后再在上一级的结构使用。
或者按照布局直接声明内部的变量。
2 . https://learn.microsoft.com/en-us/dotnet/framework/interop/marshalling-classes-structures-and-unions#platform-sample
可以参考这个问题中的示例:
https://stackoverflow.com/questions/71426822/marshaling-complex-c-structs-with-c-unions-for-c-sharp
如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。
注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。