同一个DLL,在C中调用的返回值和在PYTHON 中调用的返回值不同

代码的结构是相同的,请问会是什么原因?
python 代码如下

import ctypes
import time

dll = ctypes.cdll.LoadLibrary('thinkgear')#cdll different windll
dllVersion = dll.TG_GetDriverVersion();
print(dllVersion)
connectionId = dll.TG_GetNewConnectionId();
print(connectionId)
errCode = dll.TG_SetStreamLog(connectionId, "streamLog2.txt" );
#print(errCode)
errCode = dll.TG_SetDataLog(connectionId,"dataLog2.txt" );

comPortName = ctypes.c_char_p()
comPortName = "\\\\.\\COM5";
errCode = dll.TG_Connect(connectionId,comPortName,9600,0);
print errCode,'connection susser'

packersRead = 0

while 1:
    errCode = dll.TG_ReadPackets(connectionId,1)
    if errCode ==1 and dll.TG_GetValueStatus(connectionId,2)!=0:
        print dll.TG_GetValue(connectionId, 5),dll.TG_GetValue(connectionId, 6),dll.TG_GetValue(connectionId, 9)
        packersRead = packersRead + 1
        if packersRead>50:
            break

        
dll.TG_Disconnect(connectionId)
dll.TG_FreeConnection(connectionId)

C 代码如下

#include <Windows.h>  
#include <stdio.h>  
#include "thinkgear.h"  
  
void wait()   
{  
    system("pause");  
}  
  
int main()  
{  
    char *comPortName = NULL;  
    int   dllVersion = 0;  // 动态库版本  
    int   connectionId = 0;  // 连接 ID  
    int   packetsRead = 0;  // 包数量  
    int   errCode = 0;      // 错误码  
  
    /* 获取动态库版本 */  
    dllVersion = TG_GetDriverVersion();  
    printf( "ThinkGear DLL version: %d\n", dllVersion );  
  
    /* 获取连接 ID */  
    connectionId = TG_GetNewConnectionId();  
    if( connectionId < 0 )   
    {  
        printf("ERROR: TG_GetNewConnectionId() returned %d.\n",   
            connectionId );  
        wait();  
        exit( EXIT_FAILURE );  
    }  
  
    /* 原始数据日志 */  
    errCode = TG_SetStreamLog( connectionId, "streamLog.txt" );  
    if( errCode < 0 ) {  
        printf("ERROR: TG_SetStreamLog() returned %d.\n", errCode );  
        wait();  
        exit( EXIT_FAILURE );  
    }  
  
    /* ThinkGear 数据日志 */  
    errCode = TG_SetDataLog( connectionId, "dataLog.txt" );  
    if( errCode < 0 ) {  
        printf("ERROR: TG_SetDataLog() returned %d.\n", errCode );  
        wait();  
        exit( EXIT_FAILURE );  
    }  
  
    /* 准备连接的 COM 口 */  
    comPortName = "\\\\.\\COM5"; // \\.\COM3  
    errCode = TG_Connect( connectionId,   
        comPortName,   
        TG_BAUD_9600,   
        TG_STREAM_PACKETS );  
    if( errCode < 0 ) {  
        printf("ERROR: TG_Connect() returned %d.\n", errCode );  
        wait();  
        exit( EXIT_FAILURE );  
    }  
    
    /* 不停的读取数据 */  
    packetsRead = 0;  
    while(1/* packetsRead < 10*/ )   
    {  
        //Sleep(50);  
        /* 读一个报文 */  
        errCode = TG_ReadPackets( connectionId, 1 );  
  
        /* 如果这个报文读取成功 */  
        if( errCode == 1 )  
        {  
        int detla,theta,beta1;  
            if(( errCode = TG_GetValueStatus(connectionId, TG_DATA_ATTENTION)) != 0 )   
            {  
              detla = TG_GetValue(connectionId, TG_DATA_DELTA); 
        theta = TG_GetValue(connectionId, TG_DATA_THETA); 
        beta1 = TG_GetValue(connectionId, TG_DATA_BETA1); 
                printf("delta = %d, theta=%d, beta1=%d\n", detla, theta, beta1);  
            }  
        }   
        else  
        {  
            printf("ReadPackets:errcode=%d\n", errCode);  
            Sleep(1000);  
        }  
  
    }   
  
    /* 释放连接 */  
    TG_FreeConnection( connectionId );  
  
    /* End program */  
    system("pause");  
    return( EXIT_SUCCESS );  
}  

C 要用到的头文件在这https://git.oschina.net/black...

查看回复

相关问答