This commit is contained in:
2026-03-02 11:20:08 +08:00
parent 74338fdb3a
commit 5be18ded2e
21 changed files with 5984 additions and 224 deletions

View File

@@ -2,10 +2,22 @@
namespace CapMachine.Wpf.CanDrive.ZlgCan
{
/// <summary>
/// ZLG 原生驱动zlgcan.dllP/Invoke 映射层。
/// 说明:
/// - 本类仅负责将厂商 SDK 的函数/常量/结构体映射到 C#,不包含任何业务逻辑;上层 Driver/Service 会对这些 API 进行封装并提供线程安全与资源管理。
/// - 互操作注意事项:
/// 1) <c>zlgcan.dll</c> 必须随程序部署且位数与进程一致x86/x64否则会在加载/调用时失败。
/// 2) 结构体需严格按 SDK 定义设置 <see cref="StructLayoutAttribute"/> 与 Pack字段顺序与大小必须一致。
/// 3) DllImport 的 CallingConvention 与 SetLastError 需与 SDK 匹配,否则可能出现栈不平衡或错误码不可用。
/// - 约定:当前工程中通常由 <c>ZlgCanFd200uDriver</c> 负责检查 DLL 存在与架构匹配,并在打开设备前完成预检查。
/// </summary>
public class ZLGCAN
{
#region
// 设备类型常量:用于 ZCAN_OpenDevice/ZCAN_OpenDeviceByName。
// 说明:常量值来自厂商 SDK此处保持原值以便与文档/示例对照。
public static UInt32 ZCAN_PCI9810 = 2;
public static UInt32 ZCAN_USBCAN1 = 3;
public static UInt32 ZCAN_USBCAN2 = 4;
@@ -82,12 +94,16 @@ namespace CapMachine.Wpf.CanDrive.ZlgCan
#endregion
#region LIN事件
// LIN 事件常量:用于接收/状态通知。
public static UInt32 ZCAN_LIN_WAKE_UP = 1;
public static UInt32 ZCAN_LIN_ENTERED_SLEEP_MODE = 2;
public static UInt32 ZCAN_LIN_EXITED_SLEEP_MODE = 3;
#endregion
#region
// 原生函数导入:
// - 这里不逐个函数详注,具体语义以 SDK 文档为准;
// - 上层 Driver 会封装为更易用的 C# API并处理错误码、重试、线程模型等。
[DllImport("zlgcan.dll", CallingConvention = CallingConvention.StdCall, SetLastError = true)]
public static extern IntPtr ZCAN_OpenDevice(uint device_type, uint device_index, uint reserved);
@@ -230,6 +246,8 @@ namespace CapMachine.Wpf.CanDrive.ZlgCan
#endregion
#region
// SDK 结构体定义:用于与原生内存布局一致地传参/收参。
// 说明:字段注释多数来自 SDK 示例或历史代码;这里主要保证布局与 Pack 正确。
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct ZCAN_DEVICE_INFO
{

File diff suppressed because it is too large Load Diff