使用ctypes将十六进制值从C Dll返回到Python

时间:2018-05-24 20:36:10

标签: python c++ dll hex ctypes

我在文件中有一个大数组,我无法修改但需要在C ++中访问。我需要迭代数组并将值返回给python脚本。

问题:我能够通过它的名字找到数组中的元素。当我尝试将它的值和section元素返回给python包装器时,无论它们的实际值是什么,它们都返回0或-1。以下是来自external_lists.h的数组中第一个元素的示例:

if($query->rowCount() > 0) {
    foreach($results as $result) { 
        // Output the successful results
    }
} else {
    echo "Car not found!";
}

这个数组有数千个相似的元素。当我运行以下代码时,我得到info_struct A1[] = { { "LIMITING", {{0x00, 0x02, 0xFF}} ......... } 0x。 Valuedll.cpp:

-0x1

类型#include <iostream> #include <string> #include <array> #include "external_lists.h" extern info_struct A1[]; extern info_struct A2[]; extern int A1size; extern int A2size; #define DLLEXPORT extern "C" __declspec(dllexport) DLLEXPORT int get_creation_data(const char* needed_name){ int A1_size = ( A1size/ sizeof(A1[0])) ; int A2_size = ( A2size / sizeof(A2[0])) ; for (int i = 0; i < A1_size; i++) { if (A1[i].name == needed_name) { return A1[i].style->value; } } return -1; } 由以下结构构成:

info_struct

我需要获取样式数组中的值。 style_length结构如下:

struct info_struct{
const char* name; 
style_length style[MAX_SIZE];
options_length options[MAX_SIZE];
}

我的python包装器如下:

struct style_length{
   uint16_t value, section;
   option_bits obits;
}

输出:

import os, sys, re
from ctypes import *
import ctypes as ct

def get_creation_values(value_name):
  valuell = CDLL('C:\\Documents\\creation.dll')
  valuell.get_section_data.argtypes = [c_char_p]
  valuell.get_section_data.restype = ct.c_int16
  return hex(valuell.get_creation_data(value_name))

if __name__ == "__main__":
  val = get_creation_values('LIMITING')
  print(val)

提前感谢您的帮助。如果这太多了,谢谢你的阅读。我会尽力澄清。

0 个答案:

没有答案