Python ctypes数据类型

时间:2015-08-04 14:34:39

标签: python ctypes

我正在尝试编写一个与scada软件程序接口的python程序。 scada程序通过一些dll文件提供api,并在帮助中提供了一些示例代码(用C语言编写)。所以基本上我试图将示例代码翻译成python。这是我正在使用的代码:

HANDLE     hSearch;
HANDLE     hObject;
HANDLE     hFind;
// Search the Tag table
hSearch = ctFindFirst(hCTAPI, "Tag", NULL, &hObject, 0);
if (hSearch == NULL) {
    // no tags found
} else {
    do {
        char    sName[32];
        // Get the tag name
        ctGetProperty(hObject, "Tag", sName, sizeof(sName), NULL,
        DBTYPE_STR);
    } while (ctFindNext(hSearch, &hObject));
    ctFindClose(hSearch);
    }
// Get Historical Trend data via CTAPI
// Get 100 samples of the CPU trend at 2 second
hFind = ctFindFirst(hCTAPI, "CTAPITrend(\"10:15:00 \", \"11/8/1998\", 2,              100, 0, \"CPU\")", &hObject, 0);
while (hFind) {
    char    sTime[32], sDate[32], sValue[32];
    ctGetProperty(hObject, "TIME", sTime, sizeof(sTime), NULL, DBTYPE_STR);
    ctGetProperty(hObject, "DATE", sDate, sizeof(sDate), NULL, DBTYPE_STR);
    ctGetProperty(hObject, "CPU", sValue, sizeof(sValue), NULL, DBTYPE_STR);
    // do something with the trend data.
    if (!ctFindNext(hFind, &hObject)) {
        ctFindClose(hFind);
        hFind = NULL;
        break;
    }
}

我有两个问题。第一个是我不知道如何使用ctypes在DBTYPE_STR函数中使用ctGetProperty数据类型。 API帮助提供有关该参数(dwType)的信息:

dwType
Type: DWORD 
Input/output: Input 
Description: The desired return type as follows: 

Value        | Meaning  
DBTYPE_UI1   | UCHAR  
DBTYPE _I1   | 1 byte INT  
DBTYPE _I2   | 2 byte INT  
DBTYPE _I4   | 4 byte INT  
DBTYPE _R4   | 4 byte REAL  
DBTYPE _R8   | 8 byte REAL  
DBTYPE _BOOL | BOOLEAN  
DBTYPE_BYTES | Byte stream  
DBTYPE _STR  | NULL Terminated STRING  

我无法弄清楚的另一件事是如何使用ctypes声明一个句柄数据类型。 非常感谢你们提供的任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

查看模块“ctypes.wintypes”。它定义了很多Windows类型。它为您定义了“HANDLE”和“DWORD”。

dwType是一个DWORD,因此期望一个无符号的32位整数。看起来它是一个恒定的值。如果你能找到用于C / C ++的包含文件,你可以找到DBTYPE_STR计算的整数,并在Python中定义相同的值。