daShangDao_kfzgw-info/md/config.md
2026-02-27 11:46:40 +08:00

3.5 KiB
Raw Blame History

config.dll 使用教程

1.创建DLL工具实例

加载DLL文件

// ConfigDLL 配置文件读取DLL结构
type ConfigDLL struct {
    dll                 *syscall.DLL
    readConfigFile     *syscall.Proc // 读取配置文件
    getVersion         *syscall.Proc // 获取版本信息
    freeCString        *syscall.Proc // 释放C字符串
}

// 初始化ConfigDLL
func InitConfigDLL() (*ConfigDLL, error) {
    dllPath := filepath.Join("dll", "config.dll")
    if _, err := os.Stat(dllPath); os.IsNotExist(err) {
        return nil, fmt.Errorf("config DLL 不存在: %s", dllPath)
    }
    if dll, err := syscall.LoadDLL(dllPath); err != nil {
        return nil, fmt.Errorf("加载config DLL 失败: %s", err)
    } else {
        return &ConfigDLL{
            dll:            dll,
            readConfigFile: dll.MustFindProc("ReadConfigFile"),
            getVersion:     dll.MustFindProc("GetVersion"),
            freeCString:    dll.MustFindProc("FreeCString"),
        }, nil
    }
}

dll, err := InitConfigDLL()

获取C字符串

// cStr 获取C字符串
func (m *ConfigDLL) cStr(p uintptr) string {
    if p == 0 {
        return ""
    }
    b := []byte{}
    for i := uintptr(0); ; i++ {
        c := *(*byte)(unsafe.Pointer(p + i))
        if c == 0 {
            break
        }
        b = append(b, c)
    }
    s := string(b)
    if m.freeCString != nil {
        m.freeCString.Call(p)
    }
    return s
}

2. 使用DLL函数示例

// 读取配置文件
func (m *ConfigDLL) ReadConfigFile(filePath, fileName string) (string, error) {
    proc, err := m.dll.FindProc("ReadConfigFile")
    if err != nil {
        return "", fmt.Errorf("找不到函数 ReadConfigFile: %v", err)
    }
    
    filePathPtr, _ := syscall.BytePtrFromString(filePath)
    fileNamePtr, _ := syscall.BytePtrFromString(fileName)
    
    resultPtr, _, _ := proc.Call(
        uintptr(unsafe.Pointer(filePathPtr)),
        uintptr(unsafe.Pointer(fileNamePtr)),
    )
    
    result := m.cStr(resultPtr)
    return result, nil
}

接口详情

读取配置文件接口--ReadConfigFile

请求信息

dll.ReadConfigFile(filePath, fileName)

请求参数

参数名 类型 必填 说明
filePath string 文件路径可以是本地路径或HTTP/HTTPS URL
fileName string 配置文件名

功能说明

此接口用于读取多种格式的配置文件,支持以下特性:
1.支持的文件格式:
JSON (.json)
YAML (.yaml, .yml)
INI (.ini, .conf)
2.支持的数据源:
本地文件路径
HTTP/HTTPS URL
3.配置解析:
JSON/YAML文件解析为Map结构
INI文件支持多节section解析
DEFAULT节的内容会合并到顶层

响应示例

JSON字符串
{
  "database": {
    "host": "localhost",
    "port": 3306,
    "username": "admin"
  },
  "server": {
    "port": 8080,
    "timeout": 30
  }
}

错误响应示例

"error": "JSON解析错误: invalid character '}' looking for beginning of object key string"

释放C字符串内存--FreeCString

请求信息

dll.FreeCString(str)

请求参数

参数名 类型 必填 说明
str string 需要释放的C字符串

响应示例

获取版本信息接口--GetVersion

请求信息

dll.GetVersion()

请求参数

响应示例

v3

错误响应示例

{
  "error": "找不到函数 GetVersion"
}