Quantex GmbH
您的地区:欧洲

PassThruClose v4.04 v5.0

终止与适配器的通信

最后修改:

说明

该函数终止与适配器的通信并释放所有相关资源。调用时会自动关闭所有已打开的通道(协议),因此无需对每个通道单独调用 PassThruDisconnect()

long PassThruClose(unsigned long DeviceID)
重要:请务必在程序结束前调用 PassThruClose()。否则,下次调用 PassThruOpen() 时将返回错误 ERR_DEVICE_IN_USE

参数

返回的错误代码

代码 说明 可能的原因及解决方法
STATUS_NOERROR 函数执行成功 -
ERR_INVALID_DEVICE_ID 设备标识符无效
  • DeviceID 并非由 PassThruOpen() 返回
  • 设备此前已被关闭
  • 解决方法:请检查传入的 DeviceID 是否正确
ERR_DEVICE_NOT_CONNECTED 与适配器的连接已丢失
  • 适配器已关闭或已断开连接
  • 解决方法:资源已自动释放,可忽略此错误
ERR_FAILED 内部错误
  • 释放资源时出错
  • 解决方法:使用 PassThruGetLastError() 获取详细信息

示例

C/C++ 示例

#include "j2534_dll.hpp"

unsigned long DeviceID; // 从 PassThruOpen 获取的 ID

// ... 设备操作 ...

// 关闭连接
long ret = PassThruClose(DeviceID);
if (ret != STATUS_NOERROR)
{
    char error[256];
    PassThruGetLastError(error);
    printf("关闭失败: %s\n", error);
}

Kotlin (Android) 示例

// deviceID 此前已从 ptOpen 获取
val result = j2534.ptClose(deviceID)

if (result.status == STATUS_NOERROR) {
    Log.i("J2534", "与适配器的连接已关闭")
} else {
    Log.e("J2534", "关闭失败: ${result.status}")
}

Python (ctypes) 示例

from ctypes import *

# device_id 此前已从 PassThruOpen 获取

ret = j2534.PassThruClose(device_id)

if ret == 0:  # STATUS_NOERROR
    print("连接已关闭")
else:
    error = create_string_buffer(256)
    j2534.PassThruGetLastError(error)
    print(f"错误: {error.value.decode()}")

C# (P/Invoke) 示例

// deviceId 此前已从 PassThruOpen 获取

int ret = J2534.PassThruClose(deviceId);

if (ret == 0) // STATUS_NOERROR
{
    Console.WriteLine("连接已关闭");
}
else
{
    var error = new System.Text.StringBuilder(256);
    J2534.PassThruGetLastError(error);
    Console.WriteLine($"错误: {error}");
}