dbpclient OK

This commit is contained in:
2022-11-08 13:49:53 +08:00
commit 53d6c7efe7
13 changed files with 1000 additions and 0 deletions

37
.gitignore vendored Normal file
View File

@@ -0,0 +1,37 @@
### C++ template
# Prerequisites
*.d
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
#*.dll
# Fortran module files
*.mod
*.smod
# Compiled Static libraries
*.lai
*.la
#*.a
*.lib
# Executables
*.exe
*.out
*.app
#Clion
.idea
cmake-build-*

23
CMakeLists.txt Normal file
View File

@@ -0,0 +1,23 @@
cmake_minimum_required(VERSION 3.24)
project(DBP_exporter)
set(CMAKE_CXX_STANDARD 20)
include_directories(dbpapi/include)
link_directories(dbpapi/lib)
set(
DBP_EXPORTER_SRCS
main.cpp
DBPclient/DBPclient.cpp
DBPclient/DBPclient.h
# DBPcollector/DBPcollector.cpp
# DBPcollector/DBPcollector.h
)
add_executable(DBP_exporter ${DBP_EXPORTER_SRCS})
target_link_libraries(
DBP_exporter
libdbpapi.a
)

227
DBPclient/DBPclient.cpp Normal file
View File

@@ -0,0 +1,227 @@
//
// Created by test on 2022/11/3.
//
#include "DBPclient.h"
#include <fstream>
#include <windows.h>
DBPclient::DBPclient(std::string endpoint, std::string username, std::string password) :
dbp_endpoint(std::move(endpoint)), dbp_username(std::move(username)), dbp_password(std::move(password)) {
m_dwHandle = 0;
}
DBPclient::~DBPclient() {
}
bool DBPclient::connect() {
// 设置连接参数
WORD wport = 12084;
m_dwHandle = DBPCreate2(dbp_endpoint.data(), dbp_username.data(), dbp_password.data(), wport, false); //创建对象
std::chrono::steady_clock::time_point t_begin = std::chrono::steady_clock::now();
//创建对象 启动连接
DWORD ret;
if (m_dwHandle) {
ret = DBPConnect(m_dwHandle);
if (ret == 0) {
//取连接信息
char sip[16];
int pnNum;
DBPGetSvrConInfo(m_dwHandle, sip, &pnNum);
std::chrono::steady_clock::time_point t_end = std::chrono::steady_clock::now();
std::chrono::duration<double> time_used = std::chrono::duration_cast < std::chrono::duration < double >> (
t_end - t_begin);
std::cout << "connect use:" << time_used << std::endl;
return true;
} else {
std::cout << "connect failed";
// std::chrono::steady_clock::time_point t_end = std::chrono::steady_clock::now();
// std::chrono::duration<double> time_used = std::chrono::duration_cast<std::chrono::duration<double>>(
// t_end - t_begin);
// std::cout << "connect failed use:" << time_used << std::endl;
return false;
}
}
return true;
}
void DBPclient::disconnect() {
int pnCon;
DWORD ret;
ret = DBPIsConnect(m_dwHandle, &pnCon);
if (ret == 0 && pnCon != 0) //连接
{
DBPDisConnect(m_dwHandle);//关闭连接
DBPDestroy(m_dwHandle);//删除对象
std::cout << "disconnected";
}
}
struct DataInfo {
std::array<char, 80> szSName = {0};
std::array<char, 16> szSDBName = {0};
std::array<char, 80> szSDBTagName = {0};
std::array<char, 80> szSDes = {0};
std::array<char, 16> szSUnit = {0};
DWORD szDWid;
WORD szWType;
};
void DBPclient::readValue(const std::vector <std::string> &node_ids) {
std::vector <DataInfo> vData;
std::vector<char *> vTags;
// 读全部标签
if (m_dwHandle) {
// 查询标签,获取标签个数
DWORD ret;
long ltagnum, count = 0, nIndex = 0;
ret = DBPQueryTagFromDbp(//查询标签,查询后结果保存在对象中下次用EnumTagAttr逐个取属性
m_dwHandle,
NULL, //标签名过滤传NULL或空串表示全部
NULL, //描述过滤传NULL或空串表示全部
-1, //类型,-1表示全部
&ltagnum //查询到的标签数
);//返回错误码
if (ret != 0) {
std::cout << "query tag error";
return;
}
std::cout << "tag num:" << ltagnum << std::endl;
vData.resize(ltagnum);
// 读标签属性
short errcode0; //错误代码
long ltagflag0; //标签标志,
std::chrono::steady_clock::time_point t_begin = std::chrono::steady_clock::now();
std::cout << "read tag" << std::endl;
for (long i = 0; i < vData.size(); i++) {
ret = DBPEnumTagAttr( //枚举查询后标签属性
m_dwHandle,
vData[i].szSName.data(), //标签名 80
vData[i].szSDBName.data(), //数据库实例名 16
vData[i].szSDBTagName.data(), //数据库标签名 80
vData[i].szSDes.data(), //描述 80
vData[i].szSUnit.data(), //单位 16
&vData[i].szDWid, //标签ID
&vData[i].szWType, //数据类型
&errcode0, //错误代码
&ltagflag0, //标签标志,
i //位置 0到查询的标签数-1
); //返回 DBP_OK表示成功否则错误或没有了}
if (ret == 0) {
// for (auto const &t: vData[i].szSName) {
// std::cout << t;
// }
// std::cout << std::endl;
} else {
std::cout << i << "error code:" << errcode0 << std::endl;
return;
}
}
std::chrono::steady_clock::time_point t_end = std::chrono::steady_clock::now();
std::chrono::duration<double> time_used = std::chrono::duration_cast < std::chrono::duration < double >> (
t_end - t_begin);
std::cout << "read tag use:" << time_used << std::endl;
for (auto &d: vData) {
vTags.emplace_back(d.szSName.data());
}
std::vector<long> ltimes;
std::vector<short> snqas;
std::vector<double> dblals;
std::vector<long> lvals;
std::vector<int> ntypes;
std::vector<short> errs;
ltimes.resize(ltagnum);
snqas.resize(ltagnum);
dblals.resize(ltagnum);
lvals.resize(ltagnum);
ntypes.resize(ltagnum);
errs.resize(ltagnum);
std::cout << "read value" << std::endl;
std::chrono::steady_clock::time_point v_begin = std::chrono::steady_clock::now();
ret = DBPGetSnapshot( //读快照
m_dwHandle,
vTags.data(), //标签名数组
ltimes.data(), //in/out, 时标
snqas.data(), //in/out, 质量
dblals.data(), //in/out, 存放double值,DT_FLOAT32,DT_FLOAT64存放区
lvals.data(), //in/out, 存放Long值,DT_DIGITAL,DT_INT32,DT_INT64存放区
ntypes.data(), //in/out, 数据类型,DT_INT32,DT_FLOAT32等。
errs.data(), //in/out, 错误码
ltagnum //in, 个数
);//返回错误码
if (ret != 0) {
return;
}
std::chrono::steady_clock::time_point v_end = std::chrono::steady_clock::now();
std::chrono::duration<double> read_value_time_used =
std::chrono::duration_cast < std::chrono::duration < double >> (
v_end - v_begin);
std::cout << "read value use:" << read_value_time_used << std::endl;
for (int j = 0; j < ltagnum; j++) {
//std::cout << j << ":" << ntypes[j] << std::endl;
switch (ntypes[j]) {
case DT_DIGITAL:
dbp_read_value[vTags[j]] = lvals[j];
case DT_INT32:
dbp_read_value[vTags[j]] = lvals[j];
case DT_INT64:
//std::cout << lvals[j] << std::endl;
dbp_read_value[vTags[j]] = lvals[j];
break;
case DT_FLOAT32:
dbp_read_value[vTags[j]] = lvals[j];
case DT_FLOAT64:
//std::cout << dblals[j] << std::endl;
dbp_read_value[vTags[j]] = dblals[j];
break;
default:
dbp_read_value[vTags[j]] = 0;
}
}
}
std::fstream fs;
fs.open("value.txt", std::ios::ate | std::ios::out);
for (auto iter: dbp_read_value) {
fs << iter.first << ":" << iter.second << std::endl;
}
fs.close();
}
void DBPclient::stop() {
running = false;
disconnect();
}
void DBPclient::run() {
while (running) {
if (!connect()) {
//disconnect();
// spdlog::error("OPC-UA Server({}) not connected({}). Retrying to connect in 1 second.", ua_endpoint,
// retval);
std::cout << "Retrying to connect in 1 second." << std::endl;
Sleep(1000);
continue;
}
}
}

48
DBPclient/DBPclient.h Normal file
View File

@@ -0,0 +1,48 @@
//
// Created by test on 2022/11/3.
//
#ifndef OPCUA_EXPORTER_DBPCLIENT_H
#define OPCUA_EXPORTER_DBPCLIENT_H
#include <string>
#include <map>
#include <unordered_map>
#include <vector>
#include <iostream>
#include <minwindef.h>
#include "dbpapi_j.h"
#include <array>
#include <chrono>
class DBPclient {
public:
explicit DBPclient(std::string endpoint, std::string username, std::string password);
~DBPclient();
void stop();
void run();
bool connect();
void disconnect();
void readValue(std::vector <std::string> const &node_ids);
private:
std::string dbp_endpoint;
std::string dbp_username;
std::string dbp_password;
DWORD m_dwHandle;
bool running{true};
std::map<std::string, double> dbp_read_value;
};
#endif //OPCUA_EXPORTER_DBPCLIENT_H

View File

@@ -0,0 +1,97 @@
//
// Created by test on 2022/11/3.
//
#include "DBPcollector.h"
DBPcollector::DBPcollector(const YAML::Node &config, std::shared_ptr<DBPclient> dbp_client) :
registry_(std::make_shared<prometheus::Registry>()),
dbp_client_(dbp_client) {
buildMetrics(config);
}
void DBPcollector::clearMetrics() {
dbp_read_node_ids.clear();
for (auto &node: nodes) {
if (nullptr != node.second.family) {
if (nullptr != node.second.data) {
node.second.family->Remove(node.second.data);
}
registry_->Remove(*node.second.family);
}
}
nodes.clear();
metrics_json_.clear();
}
void DBPcollector::buildMetrics(const YAML::Node &config) {
clearMetrics();
for (auto item: config) {
if (item.IsNull() || item["name"].IsNull() || item["nodeid"].IsNull() || item["type"].IsNull()) {
continue;
}
auto node_id = item["nodeid"].as<std::string>();
auto name = item["name"].as<std::string>();
auto help = item["help"].as<std::string>(std::string());
metrics_json_.push_back({
{"node_id", node_id},
{"name", name},
{"help", help}
});
dbp_read_node_ids.emplace_back(node_id);
spdlog::info("load metrics {}({}).", name, node_id);
auto &node_family = prometheus::BuildGauge()
.Name(name)
.Help(help)
.Labels(getNodeLabels(item["labels"]))
.Register(*registry_);
nodes[node_id] = {
name,
&node_family,
&(node_family.Add({{"data", "data"}})),
};
}
}
bool DBPcollector::updateMetrics() {
do {
if (dbp_read_node_ids.empty()) {
break;
}
auto values = dbp_client_->readValue(dbp_read_node_ids);
if (values.empty()) { // none value return
break;
}
for (auto const &value: values) {
auto node_iter = nodes.find(value.first);
if (node_iter != nodes.end()) {
node_iter->second.setValue(value.second);
}
}
return true;
} while (false);
return false;
}
prometheus::Labels DBPcollector::getNodeLabels(const YAML::Node &labels) {
return prometheus::Labels();
}
std::vector<prometheus::MetricFamily> DBPcollector::Collect() const {
if (const_cast<DBPcollector *>(this)->updateMetrics()) {
return registry_->Collect();
}
return {};
}
nlohmann::json const &DBPcollector::getMetricsJson() {
return metrics_json_;
}
void DBPcollector::st_node::setValue(double val) {
if (nullptr != data) {
data->Set(val);
}
}

View File

@@ -0,0 +1,55 @@
//
// Created by test on 2022/11/3.
//
#ifndef OPCUA_EXPORTER_DBPCOLLECTOR_H
#define OPCUA_EXPORTER_DBPCOLLECTOR_H
#include <prometheus/collectable.h>
#include <prometheus/family.h>
#include <prometheus/labels.h>
#include <prometheus/metric_family.h>
#include <prometheus/registry.h>
#include <prometheus/gauge.h>
#include <yaml-cpp/yaml.h>
#include <DBPclient/DBPclient.h>
#include <json.hpp>
#include <spdlog/spdlog.h>
class DBPcollector : public prometheus::Collectable {
public:
explicit DBPcollector(YAML::Node const &config, std::shared_ptr<DBPclient> dbp_client);
~DBPcollector() override = default;
std::vector<prometheus::MetricFamily> Collect() const override;
nlohmann::json const &getMetricsJson();
private:
void buildMetrics(YAML::Node const &config);
bool updateMetrics();
void clearMetrics();
prometheus::Labels getNodeLabels(YAML::Node const &labels);
private:
std::shared_ptr<prometheus::Registry> registry_;
std::shared_ptr<DBPclient> dbp_client_;
std::vector<std::string> dbp_read_node_ids;
struct st_node {
std::string name;
prometheus::Family<prometheus::Gauge> *family{nullptr};
prometheus::Gauge *data{nullptr};
void setValue(double val);
};
std::map<std::string, st_node> nodes;
nlohmann::json metrics_json_;
};
#endif //OPCUA_EXPORTER_DBPCOLLECTOR_H

Binary file not shown.

BIN
dbpapi/include/._dbpapi_j.h Normal file

Binary file not shown.

View File

@@ -0,0 +1,77 @@
#ifndef __DBPAPI_ERR_H_
#define __DBPAPI_ERR_H_
//ͨ<>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DBERR_OK 0x00 //<2F>ɹ<EFBFBD>
#define DBERR_FAIL 0x01 //ʧ<><CAA7>
//<2F><><EFBFBD>ݿ⼶<DDBF><E2BCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DBERR_CONNECT 0x02 //û<><C3BB><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
#define DBERR_NOINTERFACE 0x03 //<2F>޴˽ӿ<CBBD>
#define DBERR_HANDLE 0x04 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DBERR_RECS 0x05 //<2F><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>¼<EFBFBD><C2BC>
#define DBERR_MEMEORY 0x06 //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
#define DBERR_NOTSUPPORT 0x07 //<2F><>֧<EFBFBD><D6A7>
#define DBERR_NOMOREREC 0x08 //û<>м<EFBFBD>¼
#define DBERR_NOTAG 0x09 //<2F>޴˱<DEB4>ǩ
#define DBERR_TYPE 0x0A //<2F><><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DBERR_TIME 0x0B //ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DBERR_NOVAL 0x0C //û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DBERR_NOALL_OK 0x0D //<2F><>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ɹ<EFBFBD>
#define DBERR_BUF_FULL 0x0E //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA>ٲ<EFBFBD>
#define DBERR_NODRV 0X1E //<2F>޴<EFBFBD><DEB4><EFBFBD><EFBFBD><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DBPE_OK 0x00 //<2F>ɹ<EFBFBD>
#define DBPE_ERR 0x01 //<2F><><EFBFBD><EFBFBD>
#define DBPE_NOTAG 0xA1 //<2F><>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DBPE_TAGID_EXIST 0xA2 //ID<49><44><EFBFBD><EFBFBD>
#define DBPE_TAGNAME_EXIST 0xA3 //<2F><><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>
#define DBPE_TAG_EXIST 0xA4 //ID<49><44><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>
#define DBPE_TYPE 0xA5 //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD>
#define DBPE_MODIFYTYPE 0xA6 //<2F><><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>
#define DBPE_MEMORY 0xA7 //<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
#define DBPE_NODB 0xA8 //<2F><><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
#define DBPE_CONBUSY 0xA9 //<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>æ
#define DBPE_MANING 0xAA //<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DBPE_DBCONID 0xAB //<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>ID<49><44><EFBFBD><EFBFBD>
#define DBPE_TIMEOUT 0xAC //<2F><>ʱ
#define DBPE_NODATA 0xAD //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DBPE_WORKBUSY 0xAE //<2F><><EFBFBD>ݿ⹤<DDBF><E2B9A4>æ
#define DBPE_INVALID_SESSION 0xAF //<2F><>ЧSession<6F><6E>Ҳ<EFBFBD><D2B2><EFBFBD><EFBFBD><EFBFBD>Ƕ<EFBFBD>ӦSession<6F>ı<EFBFBD>ǩ<EFBFBD>Ѿ<EFBFBD><D1BE><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><>ǩֵ<C7A9><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ERRTV_OK DBERR_OK //<2F>ɹ<EFBFBD>
#define ERRTV_NOTAG DBERR_NOTAG //<2F>޴˱<DEB4>ǩ
#define ERRTV_TYPE DBERR_TYPE //<2F><><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷<EFBFBD>ת<EFBFBD><D7AA>
#define ERRTV_TIME DBERR_TIME //ʱ<><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define ERRTV_ERR DBERR_FAIL //<2F><>ǩֵ<C7A9><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
#define ERRTV_BUF_FULL DBERR_BUF_FULL //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA>ٲ<EFBFBD>
// <20><>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DS_OK 0 //
#define DS_ERR 1 //ʧ<><CAA7>
#define DS_ACTOR_FULL 0x20 //<2F><>ɫ<EFBFBD><C9AB>
#define DS_OPERATOR_FULL 0x21 //<2F>û<EFBFBD><C3BB><EFBFBD>
#define DS_TRUSTIP_FULL 0x22 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DS_NOACTOR 0x23 //<2F>޴˽<DEB4>ɫ
#define DS_NOOPERATOR 0x24 //<2F>޴<EFBFBD><DEB4>˺<EFBFBD>
#define DS_NOTRUSTIP 0x25 //<2F>޴<EFBFBD>IP
#define DS_ACTOR_EXIST 0x26 //<2F><>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>
#define DS_OPERATOR_EXIST 0x27 //<2F>˺Ŵ<CBBA><C5B4><EFBFBD>
#define DS_TRUSTIP_EXIST 0x28 //IP<49><50><EFBFBD><EFBFBD>
#define DS_NOPOWER 0x29 //<2F>޴<EFBFBD>Ȩ<EFBFBD><C8A8>
#define DS_PASSERR 0x2A //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DS_USERLOCK 0x2B //<2F>˺Ž<CBBA><C5BD><EFBFBD>
#define DS_ACTORUSE 0x2C //<2F><>ɫ<EFBFBD><C9AB>ʹ<EFBFBD><CAB9>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>API<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define APIE_OK 0x00
//#define APIE_ERR 0x01
#define APIE_HANDLE 0xC0 //<2F><><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
#define APIE_CONNECT 0xC1 //û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define APIE_MEMORY 0xC2 //API<50>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
#define APIE_NOMOREBUF 0xC3 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define APIE_ERR 0xC4 //<2F><EFBFBD><C2B6><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>DBPE_ERR<52><52><EFBFBD><EFBFBD>
#endif /* __DBPAPI_ERR_H_ */

423
dbpapi/include/dbpapi_j.h Normal file
View File

@@ -0,0 +1,423 @@
#if !defined _DPAPI2_J_H_I
#define _DPAPI2_J_H_I
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DT_VOID 0 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DT_DIGITAL 1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><D2B2>4<EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
#define DT_INT32 2 //4<>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
#define DT_FLOAT32 3 //4<>ֽڸ<D6BD><DAB8><EFBFBD><EFBFBD><EFBFBD>
#define DT_INT64 4 //8<>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
#define DT_FLOAT64 5 //8<>ֽڸ<D6BD><DAB8><EFBFBD><EFBFBD><EFBFBD>
#define DT_STRING 6 //<2F>ַ<EFBFBD><D6B7><EFBFBD>
#define DT_BLOB 7 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DBP_QUALITY_GOOD 0x00 // GOOD
#define DBP_QUALITY_BAD 0x01 // <20><>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ض<EFBFBD>ԭ<EFBFBD><D4AD>
#define DBP_QUALITY_BAD_CONFIG_ERROR 0x02 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E7A3AC>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD>еķ<D0B5><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>
#define DBP_QUALITY_BAD_NOT_CONNECTED 0x03 // <20><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD><D3B5><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><EFBFBD><EAA3AC><EFBFBD>޷<EFBFBD><DEB7>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD>ڸ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>Ϊ<EFBFBD><CEAA>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դδ<D4B4>
#define DBP_QUALITY_BAD_DEVICE_FAIL 0x04 // <20><><EFBFBD><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
#define DBP_QUALITY_BAD_SENSOR_FAIL 0x05 // <20><><EFBFBD><EFBFBD><E2B5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DBP_QUALITY_BAD_LAST 0x06 // <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶʧ<D1B6>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чֵ<D0A7>ǿ<EFBFBD><C7BF>õġ<C3B5><C4A1><EFBFBD>ע<EFBFBD>⣬ʱ<E2A3AC><CAB1><EFBFBD><EFBFBD><EFBFBD>ǵ<EFBFBD><C7B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>Чֵ<D0A7><D6B5>ʱ<EFBFBD><EFBFBD><EAA3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
#define DBP_QUALITY_BAD_COMM_FAIL 0x07 // <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨѶʧ<D1B6>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>Чֵ
#define DBP_QUALITY_BAD_OUT_OF_SERVICE 0x08 // <20>ñ<EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><E9B1BB><EFBFBD><EFBFBD>Ϊ<EFBFBD>ǻ<C7BB><EEB6AF><EFBFBD><EFBFBD>ʾ<EFBFBD>ñ<EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>ij<EFBFBD><C4B3>ԭ<EFBFBD>򲻱<EFBFBD><F2B2BBB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DBP_QUALITY_UNCERTAIN 0xE0 // ֵ<><D6B5>Ч<EFBFBD>Բ<EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ض<EFBFBD>ԭ<EFBFBD><D4AD>
#define DBP_QUALITY_UNCERTAIN_LAST 0xE1 // <20>Ѿ<EFBFBD>ֹͣд<D6B9><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ֵӦ<D6B5><D3A6><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ȥֵ<C8A5><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><E2A3AC>״̬<D7B4><CCAC>ʾΪ<CABE>ڹ涨ʱ<E6B6A8><CAB1><EFBFBD>ڱ<EFBFBD>ǩδ<C7A9><CEB4><EFBFBD><EFBFBD><EFBFBD>¡<EFBFBD><C2A1><EFBFBD>Bad/Last Usable Value<75><65>ʾΪ<CABE><CEAA><EFBFBD>⵽ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DBP_QUALITY_UNCERTAIN_SENSOR 0xE2 // ֵ<><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̷<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD>ߴ<EFBFBD><DFB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׼ȷ
#define DBP_QUALITY_UNCERTAIN_EU_EXCEEDED 0xE3 // <20><><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD>ע<EFBFBD><EFBFBD><E2A3AC>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ζ<EFBFBD>Ÿ<EFBFBD>ֵ<EFBFBD>dz<EFBFBD><C7B3>޵<EFBFBD>
#define DBP_QUALITY_UNCERTAIN_SUB_NORMAL 0xE4 // <20><>ֵ<EFBFBD><D6B5><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬ΪGOOD<4F><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڹ涨ֵ
#define DBP_QUALITY_CALC_OFF 0xF0 // <20><><EFBFBD><EFBFBD>ֹͣ
#define DBP_QUALITY_LOLO_LIMIT 0xF9 // <20>͵ͱ<CDB5>
#define DBP_QUALITY_LO_LIMIT 0xFA // <20>ͱ<EFBFBD>
#define DBP_QUALITY_HI_LIMIT 0xFB // <20>߱<EFBFBD>
#define DBP_QUALITY_HIHI_LIMIT 0xFC // <20>߸߱<DFB8>
#define DBP_QUALITY_NOT_INIT 0xFD // <20>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
#define DBP_QUALITY_SHUTDOWN 0xFE // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>
#define DBP_QUALITY_UNKOWN 0xFF // δ֪<CEB4><D6AA><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>ʷstr,<2C><>ʷblob,SOE<4F><45>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define RST_CUR 1 //<2F><>ǰʱ<C7B0>
#define RST_AFTER 2 //<2F><>ǰ֮<C7B0><D6AE>һ<EFBFBD><D2BB>
#define RST_DEFAULT (RST_CUR | RST_AFTER) //<2F><>ǰ<EFBFBD><C7B0>֮<EFBFBD><D6AE>һ<EFBFBD><D2BB>
// GetHisVal3ʹ<33>ã<EFBFBD><C3A3><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ֵʱ<D6B5><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡֵ
#define RHV_BEFORE 1 // ȡǰһֵ
#define RHV_AFTER 2 // ȡ<><C8A1>һֵ
#define RHV_INTERP 3 // ȡ<><C8A1>ֵ
//Ȩ<><C8A8>
#define DS_POWERMAN 0x00000001 //<2F>˺Ź<CBBA><C5B9><EFBFBD>
#define DS_SYSMAN 0x00000002 //ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>,<2C><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>
#define DS_WRITE 0x00000004 //дȨ<D0B4><C8A8>
#define DS_READ 0x00000008 //<2F><>Ȩ<EFBFBD><C8A8>
//<2F><>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>
#define TAG_FLAG_DDC 0 //<2F>ֳ<EFBFBD><D6B3><EFBFBD><EFBFBD>ݱ<EFBFBD>ǩ(ʵʱ<CAB5><CAB1><EFBFBD><EFBFBD>ǩ) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"ddctag"
#define TAG_FLAG_DEF 1 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ(<28>ֹ<EFBFBD><D6B9><EFBFBD>ǩ) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"deftag"
#define TAG_FLAG_PRE 2 //Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ(Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ) <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"pretag"
#define TAG_FLAG_CUR 3 //<2F><><EFBFBD>߱<EFBFBD>ǩ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"curtag"
#define TAG_FLAG_CALC 4 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"calctag"
//<2F><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define HISTORY_RAW 0
#define HISTORY_INSTEP 1
#define HISTPRY_PLOT 2
// <20><>Ϊ<EFBFBD>˹淶java<76>ӿ<EFBFBD><D3BF><EFBFBD><EFBFBD><EFBFBD>
#define DBPGetVersion DBP_GetVersion
extern "C"{
// dbpapi<70><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD><E6B1BE>V2.5.4.0<EFBFBD><EFBFBD>ʾΪ0x02050400
DWORD __stdcall DBP_GetVersion();
///////////////////////////////////////////////////////////
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD __stdcall DBPCreate( //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char* sips[], //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP<49><50><EFBFBD><EFBFBD> 16<31>ֽ<EFBFBD>
char* susers[], //<2F><>¼<EFBFBD>˺<EFBFBD><CBBA><EFBFBD><EFBFBD><EFBFBD> 16<31>ֽ<EFBFBD>
char* spasss[], //<2F><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 16<31>ֽ<EFBFBD>
WORD wport[], //<2F>˿<EFBFBD><CBBF><EFBFBD><EFBFBD><EFBFBD>
int nsize //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
); //<2F><><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD __stdcall DBPCreate2( //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>Ⱥ<EFBFBD><C8BA>
char* sip, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP 16<31>ֽ<EFBFBD>
char* suser, // <20><>¼<EFBFBD>˺<EFBFBD> 16<31>ֽ<EFBFBD>
char* spass, // <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD> 16<31>ֽ<EFBFBD>
WORD wport, // <20>˿<EFBFBD>
BOOL bUseGroup //<2F>Ƿ<EFBFBD>ʹ<EFBFBD><CAB9>Ⱥ<EFBFBD><C8BA>
); //<2F><><EFBFBD>ض<EFBFBD><D8B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD __stdcall DBPDestroy( //<2F><><EFBFBD>ٶ<EFBFBD><D9B6><EFBFBD>
DWORD h //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Destroy<6F>󣬸ò<F3A3ACB8><C3B2><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9><EFBFBD><EFBFBD>
);//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
///////////////////////////////////////////////////////////
//<2F><><EFBFBD>ӹ<EFBFBD><D3B9><EFBFBD>
DWORD __stdcall DBPConnect( //<2F><><EFBFBD>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>
DWORD h
);//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
DWORD __stdcall DBPDisConnect( //<2F>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD h
);//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
DWORD __stdcall DBPIsConnect( //<2F>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD h,
int* pnCon //in/out, <20><><EFBFBD><EFBFBD>0<EFBFBD><30>ʾû<CABE><C3BB><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD>0<EFBFBD><30>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
);//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
DWORD __stdcall DBPGetSvrConInfo( //ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
DWORD h,
char* sip, //in/out<75><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IP 16<31>ֽ<EFBFBD>
int* pnNum // in/out <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
);//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
///////////////////////////////////////////////////////////
//<2F><>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>
DWORD __stdcall DBPQueryTagFromDbp(//<2F><>ѯ<EFBFBD><D1AF>ǩ,<2C><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD>У<EFBFBD><D0A3>´<EFBFBD><C2B4><EFBFBD>EnumTagAttr<74><72><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
DWORD h,
const char* snameflt, //<2F><>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD>˴<EFBFBD><CBB4><EFBFBD>NULL<4C><4C><EFBFBD>մ<EFBFBD><D5B4><EFBFBD>ʾȫ<CABE><C8AB>
const char* sdesflt, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˴<EFBFBD><CBB4><EFBFBD>NULL<4C><4C><EFBFBD>մ<EFBFBD><D5B4><EFBFBD>ʾȫ<CABE><C8AB>
int ntype, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,-1<><31>ʾȫ<CABE><C8AB>
long* pltagnum //<2F><>ѯ<EFBFBD><D1AF><EFBFBD>ı<EFBFBD>ǩ<EFBFBD><C7A9>
);//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
DWORD __stdcall DBPQueryTagFromDbp2(//<2F><>ѯ<EFBFBD><D1AF>ǩ,<2C><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD>У<EFBFBD><D0A3>´<EFBFBD><C2B4><EFBFBD>EnumTagAttr<74><72><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
DWORD h,
const char* snameflt, //<2F><>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD><EFBFBD>˴<EFBFBD><CBB4><EFBFBD>NULL<4C><4C><EFBFBD>մ<EFBFBD><D5B4><EFBFBD>ʾȫ<CABE><C8AB>
const char* sdesflt, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˴<EFBFBD><CBB4><EFBFBD>NULL<4C><4C><EFBFBD>մ<EFBFBD><D5B4><EFBFBD>ʾȫ<CABE><C8AB>
int ntype, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,-1<><31>ʾȫ<CABE><C8AB>
int ntagtype, //<2F><>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>,-1<><31>ʾȫ<CABE><C8AB>
long* pltagnum //<2F><>ѯ<EFBFBD><D1AF><EFBFBD>ı<EFBFBD>ǩ<EFBFBD><C7A9>
);//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
DWORD __stdcall DBPEnumTagAttr( //ö<>ٲ<EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>
DWORD h,
char* sname, //<2F><>ǩ<EFBFBD><C7A9> 80
char* sdbname, //<2F><><EFBFBD>ݿ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD> 16
char* sdbtagname, //<2F><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>ǩ<EFBFBD><C7A9> 80
char* sdes, //<2F><><EFBFBD><EFBFBD> 80
char* sunit, //<2F><>λ 16
DWORD* dwid, //<2F><>ǩID
WORD* wtype, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
short* errcode, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long* ltagflag, //<2F><>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>
int nIndex //λ<><CEBB> 0<><30><EFBFBD><EFBFBD>ѯ<EFBFBD>ı<EFBFBD>ǩ<EFBFBD><C7A9>-1
); //<2F><><EFBFBD><EFBFBD> DBP_OK<4F><4B>ʾ<EFBFBD>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>
DWORD __stdcall DBPGetTagAttrFromDbp( //<2F>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>
DWORD h,
char* sname[], //in/out<75><74>ǩ<EFBFBD><C7A9> 80
char* sdbname[], //in/out<75><74><EFBFBD>ݿ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD> 16
char* sdbtagname[], //in/out<75><74><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>ǩ<EFBFBD><C7A9> 80
char* sdes[], //in/out<75><74><EFBFBD><EFBFBD> 80
char* sunit[], //in/out<75><74>λ 16
DWORD dwid[], //in/out<75><74>ǩID
WORD wtype[], //in/out<75><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
short errcode[], //in/out<75><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long ltagflag[], //in/out<75><74>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>,
int nsize
);//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
DWORD __stdcall DBPGetTagAttr( //<2F>ӷ<EFBFBD><D3B7><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>
DWORD h,
char* sname, //in/out<75><74>ǩ<EFBFBD><C7A9> 80
char* sdbname, //in/out<75><74><EFBFBD>ݿ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD> 16
char* sdbtagname, //in/out<75><74><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>ǩ<EFBFBD><C7A9> 80
char* sdes, //in/out<75><74><EFBFBD><EFBFBD> 80
char* sunit, //in/out<75><74>λ 16
DWORD* dwid, //in/out<75><74>ǩID
WORD* wtype, //in/out<75><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
short* errcode, //in/out<75><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long* ltagflag //in/out<75><74>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>,
);//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
///////////////////////////////////////////////////////////
//<2F><>ֵ
DWORD __stdcall DBPGetSnapshotStr( //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,string
DWORD h,
const char* sname, //<2F><>ǩ<EFBFBD><C7A9>
long* pltime,
short* psnqa,
char sval[], //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2>0
int nsize, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
int* pndatasize //<2F><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
); //<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
DWORD __stdcall DBPGetSnapshotBlob( //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,blob
DWORD h,
const char* sname, //<2F><>ǩ<EFBFBD><C7A9>
long* pltime,
short* psnqa,
char sval[], //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2>0
int nsize, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
int* pndatasize //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
);//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
DWORD __stdcall DBPGetHisVal( //<2F><><EFBFBD><EFBFBD>ʷ
DWORD h,
const char* sname, //<2F><>ǩ<EFBFBD><C7A9>
long lts, //in,<2C><>ʼʱ<CABC><CAB1>
long lte, //in,<2C><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
long linsertsec, //in,<2C><>ֵʱ<D6B5><CAB1>
long lflag, //in,<2C><>־
double dblvals[],//in/out,double<6C><65>
long lvals[], //in/out,long <20><>
long ltimes[], //in/out,ʱ<><CAB1><EFBFBD><EFBFBD>
short snqas[], //in/out,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nsize, //in,<2C>ռ<EFBFBD><D5BC><EFBFBD>С
int* pntype, //in/out,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int* pndatasize//in/out,<2C><><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
);
DWORD __stdcall DBPGetHisValFilter(
DWORD h,
const char* sname, //<2F><>ǩ<EFBFBD><C7A9>
long lts, //in,<2C><>ʼʱ<CABC><CAB1>
long lte, //in,<2C><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
long linsertsec, //in,<2C><>ֵʱ<D6B5><CAB1>
long lflag, //in,<2C><>־
const char *expression,//<2F><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
double dblvals[],//in/out,double<6C><65>
long lvals[], //in/out,long <20><>
long ltimes[], //in/out,ʱ<><CAB1><EFBFBD><EFBFBD>
short snqas[], //in/out,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nsize, //in,<2C>ռ<EFBFBD><D5BC><EFBFBD>С
int* pntype, //in/out,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int* pndatasize//in/out,<2C><><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
);
DWORD __stdcall DBPGetHisStr( //<2F><>string<6E><67>ʷ
DWORD h,
const char* sname, //in,<2C><>ǩ<EFBFBD><C7A9>
long ltime, //in,<2C><>ʼʱ<CABC><CAB1>
DWORD dwflag, //in,<2C><>־,RST_CUR,RST_AFTER,RST_DEFAULT֮һ
long* pltime, //in/out, ʱ<><CAB1>
short* psnqa, //in/out, <20><><EFBFBD><EFBFBD>
char sval[], //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2>0
int nsize, //in,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
int* pndatasize //in/out,<2C><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
); //<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
DWORD __stdcall DBPGetHisBlob( //<2F><>BLOB<4F><42>ʷ
DWORD h,
const char* sname, //in,<2C><>ǩ<EFBFBD><C7A9>
long ltime, //in,<2C><>ʼʱ<CABC><CAB1>
DWORD dwflag, //int,<2C><>־,RST_CUR,RST_AFTER,RST_DEFAULT֮һ
long* pltime, //in/out, ʱ<><CAB1>
short* psnqa, //in/out, <20><><EFBFBD><EFBFBD>
char sval[], //in/out, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2>0
int nsize, //in,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
int* pndatasize //in/out,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>
);//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
///////////////////////////////////////////////////////////
// дֵ
DWORD __stdcall DBPWriteSnapshotStr( //дstring <20><><EFBFBD><EFBFBD>
DWORD h,
const char* sname, //<2F><>ǩ<EFBFBD><C7A9>
long ltime, //ʱ<><CAB1>
short snqa, //<2F><><EFBFBD><EFBFBD>
const char* sval //<2F>ַ<EFBFBD><D6B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>β<EFBFBD><CEB2>0
); //<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
DWORD __stdcall DBPWriteHisStr( //дstring<6E><67>ʷ
DWORD h,
const char* sname, //<2F><>ǩ<EFBFBD><C7A9>
long ltime, //ʱ<><CAB1>
short snqa, //<2F><><EFBFBD><EFBFBD>
const char* sval //<2F>ַ<EFBFBD><D6B7><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>β<EFBFBD><CEB2>0
); //<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
DWORD __stdcall DBPWriteSnapshotBlob( //дBLOB<4F><42><EFBFBD><EFBFBD>
DWORD h,
const char* sname, //<2F><>ǩ<EFBFBD><C7A9>
long ltime, //ʱ<><CAB1>
short snqa, //<2F><><EFBFBD><EFBFBD>
char* pval, //ֵ
int ndatasize //ֵ<><D6B5><EFBFBD><EFBFBD>
); //<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
DWORD __stdcall DBPWriteHisBlob( //дBLOB<4F><42>ʷ
DWORD h,
const char* sname, //<2F><>ǩ<EFBFBD><C7A9>
long ltime, //ʱ<><CAB1>
short snqa, //<2F><><EFBFBD><EFBFBD>
char* pval, //ֵ
int ndatasize //ֵ<><D6B5><EFBFBD><EFBFBD>
); //<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
DWORD __stdcall DBPDelHis( //ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ
DWORD h,
const char* sname, //in <20><>ǩ<EFBFBD><C7A9>
long lts, //in <20><>ʼʱ<CABC><CAB1>
long lte //in <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
);
DWORD __stdcall DBPGetSumVal(
DWORD h,
const char* sname, //in,<2C><>ǩ<EFBFBD><C7A9>
long lts, //in,<2C><>ʼʱ<CABC><CAB1>
long lte, //in,<2C><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
long ltype, //in,ͳ<><CDB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long lds, //in,<2C>ֶ<EFBFBD>ʱ<EFBFBD><CAB1>
long ltimes[], //in/out,ʱ<><CAB1>
short snqas[], //in/out,<2C><><EFBFBD><EFBFBD>
double dblvals[], //in/out,dblvalֵ<6C><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int lvals[], //in/out,longֵ<67><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nsize, //in,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>С
int* pntype, //in/out,<2C><>ǩֵ<C7A9><D6B5><EFBFBD><EFBFBD>DT_FLOAT32<33><32>
int* pnrecsize //in/out,ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
);//<2F><>ͳ<EFBFBD><CDB3>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nsize<7A><65><EFBFBD><EFBFBD>¼
DWORD __stdcall DBPDelHis2( //ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ
DWORD h,
char* sTagNames[], //in,<2C><>ǩ<EFBFBD><C7A9><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long ltimes[], //in, ʱ<><CAB1>
short errs[], //in/out, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nsize //in,<2C><><EFBFBD><EFBFBD>
);
/* <20><><EFBFBD><EFBFBD>֧<EFBFBD>ָýӿڣ<D3BF><DAA3><EFBFBD>DBPGetMultiPointHisVal()<29><><EFBFBD><EFBFBD>
DWORD __stdcall DBPGetHisVal2( //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ
DWORD h,
long ltime, //in,ʱ<><CAB1>
char* sTagNames[], //<2F><>ǩ<EFBFBD><C7A9><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //apistring
int ntypes[], //in/out,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,DT_INT32,DT_FLOAT32<33><32>
double dblvals[], //in/out,ֵ<><D6B5><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
long lvals[], //in/out,ֵ<><D6B5><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
short snqas[], //in/out,<2C><><EFBFBD><EFBFBD>
short snerrs[], //in/out,<2C><><EFBFBD><EFBFBD>
int nsize //in,<2C><>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>
);
*/
DWORD __stdcall DBPGetSnapshot( //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD h,
char* sTagNames[],//in,<2C><>ǩ<EFBFBD><C7A9><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long ltimes[], //in/out, ʱ<><CAB1>
short snqas[], //in/out, <20><><EFBFBD><EFBFBD>
double dblvals[], //in/out, <20><><EFBFBD><EFBFBD>doubleֵ,DT_FLOAT32,DT_FLOAT64<36><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long lvals[], //in/out, <20><><EFBFBD><EFBFBD>Longֵ,DT_DIGITAL,DT_INT32,DT_INT64<36><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int ntypes[], //in/out, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,DT_INT32,DT_FLOAT32<33>ȡ<EFBFBD>
short errs[], //in/out, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nsize //in, <20><><EFBFBD><EFBFBD>
);//<2F><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>
DWORD __stdcall DBPWriteHis( //д<><D0B4>ʷ
DWORD h,
char* sTagNames[], //in,<2C><>ǩ<EFBFBD><C7A9><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long ltimes[], //in, ʱ<><CAB1>
short snqas[], //in, <20><><EFBFBD><EFBFBD>
double dblvals[], //in, <20><><EFBFBD><EFBFBD>doubleֵ,DT_FLOAT32,DT_FLOAT64<36><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long lvals[], //in, <20><><EFBFBD><EFBFBD>Longֵ,DT_DIGITAL,DT_INT32,DT_INT64<36><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int ntypes[], //in, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,DT_INT32,DT_FLOAT32<33>ȡ<EFBFBD>
short errs[], //in/out, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nsize //in, <20><><EFBFBD><EFBFBD>
);
DWORD __stdcall DBPWriteSnapshot( //д<><D0B4><EFBFBD><EFBFBD>
DWORD h,
char* sTagNames[], //in,<2C><>ǩ<EFBFBD><C7A9><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long ltimes[], //in, ʱ<><CAB1>
short snqas[], //in, <20><><EFBFBD><EFBFBD>
double dblvals[], //in, <20><><EFBFBD><EFBFBD>doubleֵ,DT_FLOAT32,DT_FLOAT64<36><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long lvals[], //in, <20><><EFBFBD><EFBFBD>Longֵ,DT_DIGITAL,DT_INT32,DT_INT64<36><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int ntypes[], //in, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,DT_INT32,DT_FLOAT32<33>ȡ<EFBFBD>
short errs[], //in/out, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nsize //in, <20><><EFBFBD><EFBFBD>
);
DWORD __stdcall DBPGetServerInfo(
DWORD h,
DWORD *dwVersion, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE>
long *lNowTime, // <20><>ǰʱ<C7B0><CAB1>
long *lStartupTime, // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
DWORD *dwConnectCount, // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD *dwTagCount, // <20><>ǰ<EFBFBD><C7B0>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>
float *fCPUUsage, // CPUռ<55><D5BC>
DWORD *dwHandleCount, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DWORD *dwThreadsCount, // <20>߳<EFBFBD><DFB3><EFBFBD>
DWORD *dwMemoryBytes, // <20>ڴ<EFBFBD>ʹ<EFBFBD><CAB9>
DWORD *dwMemoryBytesPeak, // <20>߷<EFBFBD><DFB7>ڴ<EFBFBD>ʹ<EFBFBD><CAB9>
DWORD *dwVirtualBytes, // <20><><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С
DWORD *dwVirtualBytesPeak // <20>߷<EFBFBD><DFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>С
);
DWORD __stdcall DBPGetMultiPointHisVal(
DWORD h,
long lMode, //ȡֵģʽ<C4A3><CABD>RHV_BEFORE<52><45>RHV_AFTER<45><52>RHV_INTERP
char* sTagNames[], //<2F><>ǩ<EFBFBD><C7A9><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //apistring
long ltimes[], //in/out,<2C><>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>Ӧʱ<D3A6><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E9A3AC><EFBFBD><EFBFBD>ΪRHV_BEFORE<52><45>RHV_AFTER<45><52><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>ر<EFBFBD><D8B1><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ʵʱ<CAB5><CAB1>
int ntypes[], //in/out,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,DT_INT32,DT_FLOAT32<33><32>
double dblvals[], //in/out,ֵ<><D6B5><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
long lvals[], //in/out,ֵ<><D6B5><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>
short snqas[], //in/out,<2C><><EFBFBD><EFBFBD>
short snerrs[], //in/out,<2C><><EFBFBD><EFBFBD>
int nsize //in,<2C><>ǩ<EFBFBD><C7A9><EFBFBD><EFBFBD>
);
DWORD __stdcall DBPGetDiSumVal(
DWORD h,
const char* sname, //in,<2C><>ǩ<EFBFBD><C7A9>
long lts, //in,<2C><>ʼʱ<CABC><CAB1>
long lte, //in,<2C><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
long lds, //in,<2C>ֶ<EFBFBD>ʱ<EFBFBD><CAB1>
long lval, //in,ͳ<>ƿ<EFBFBD><C6BF><EFBFBD><EFBFBD><EFBFBD>ֵ
long lpSumCount[], //in/out,<2C><><EFBFBD>ص<EFBFBD>ͳ<EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
long lpSumTimes[], //in/out,<2C><><EFBFBD>ص<EFBFBD>ͳ<EFBFBD><CDB3>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int nsize, //in,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>С
int* pnrecsize //in/out,ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>
);
DWORD __stdcall DBPGetErrorMessage( //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sval==NULL<4C><4C>dwsize<7A>ռ<D5BC><EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>APIE_MEMORY<52><59>dwsize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>С
DWORD dwErrorCode,// in,API<50><49><EFBFBD>÷<EFBFBD><C3B7>صĴ<D8B5><C4B4><EFBFBD><EFBFBD><EFBFBD>
char* sval, // out, <20><><EFBFBD>ŷ<EFBFBD><C5B7>صĴ<D8B5><C4B4><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NULL<4C><4C><EFBFBD><EFBFBD>pnrecsize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>С
DWORD *dwsize // in/out, <20><><EFBFBD>ŷ<EFBFBD><C5B7>صĴ<D8B5><C4B4><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>С<EFBFBD><D0A1>128<32><38><EFBFBD>ȵ<EFBFBD>sval<61>ռ<EFBFBD><D5BC>ǰ<EFBFBD>ȫ<EFBFBD><C8AB>
);
}
#endif //_DPAPI2_J_H_I

BIN
dbpapi/lib/dbpapi.dll Normal file

Binary file not shown.

BIN
dbpapi/lib/libdbpapi.a Normal file

Binary file not shown.

13
main.cpp Normal file
View File

@@ -0,0 +1,13 @@
#include <iostream>
#include "DBPclient/DBPclient.h"
int main() {
std::cout << "connect to 10.42.0.63" << std::endl;
DBPclient client("10.42.0.63", "admin_sipai", "admin_sipai");
if (!client.connect())
return 0;
std::vector<std::string> s;
client.readValue(s);
return 0;
}