WindowsError:异常:使用C++从Cython到Python创建DLL时,访问冲突或Windows错误193

2024-10-01 00:29:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我从PyCharm那里得到这个错误: <0xC4000000读取异常:访问冲突

它只出现在Pycharm中。当我从Windows Powershell运行python脚本时,它显示WindowsError:[Error 193]%1不是有效的Win32应用程序。我检查了调试器,并且正在传递一个值,但它的错误有时会给我空指针。一开始,我以为我在运行数组,但即使我只返回7(如您在底部看到的)并注释掉所有代码,它仍然会像所描述的那样。在

问题:

1)你有什么解决办法吗?在

2)我是否正确设置了DLL?在

3)有什么建议吗?在

非常感谢你的帮助。在

这是我的C++代码:

#include <iostream>
#include <string>
#include <array>

#include "external_lists.h"

extern creation_object A1[];
extern creation_object  A2[];
extern int A1size;
extern int A2size;


#define DLLEXPORT extern "C" __declspec(dllexport)

DLLEXPORT int get_creation_data(std::string 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].value->section; 
    }
}
return 7;
}

这是我的python包装:

^{pr2}$

总体目标:

<>我有一个大文件,我不能修改,但是需要在C++中访问。C++文件中有大列表,我需要迭代这些列表并返回一个Python脚本的值。在


Tags: 代码name脚本a2sizestringobjectinclude
1条回答
网友
1楼 · 发布于 2024-10-01 00:29:09

ctypes只理解C类型。您可以将一个字节字符串作为const char*传递,并根据需要将其分配给std::string。下面是一个完整的工作示例:

<强> C++代码< /强>测试.cpp)在

#include <string>

#define DLLEXPORT extern "C" __declspec(dllexport)

DLLEXPORT int get_creation_data(const char* name) {
    std::string needed_name(name);
    if(needed_name == "Armaja")
        return 1;
    return 0;
}

Python代码

^{pr2}$

输出:

1

注意如何指定DLL函数的参数类型和返回值。这有助于捕捉错误。例如,尝试传递Unicode字符串'Armaja',而不是字节字符串b'Armaja'(Python 3语法):

Traceback (most recent call last):
  File "C:\test.py", line 10, in <module>
    val = get_creation_values('Armaja')
  File "C:\test.py", line 7, in get_creation_values
    return trimdll.get_creation_data(value_name)
ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type

相关问题 更多 >