![](/img/trans.png)
[英]Exception thrown: read access violation. **bp** was 0xFFFFFFFFFFFFFFFF
[英]ctypes, python3.7, OSError: exception: access violation reading 0xFFFFFFFFFFFFFFFF
我正在嘗試在 python 中調用 C++,這是我的代碼:
你好.cpp
#include <iostream>
using namespace std;
int main(int argc, char * argv[])
{
char* name;
name = argv[1];
std::cout << "hello," << name << std::endl;
return 0;
}
編譯
g++ hello.cpp -o hello
g++ -shared -Wl,-soname,hello -o hello.so -fPIC hello.cpp
它在 hello.exe 中運行良好
hello.exe world
hello,world
但是當我在 python 中調用 hello.so 時,它返回一個錯誤:
蟒蛇代碼
import ctypes as C
path = 'hello.so'
so = C.cdll.LoadLibrary
hello = so(path)
v1 = "world"
hello.main(v1)
錯誤信息
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_3516\3348774050.py in <module>
7
8 v1 = "world"
----> 9 hello.main(v1)
OSError: exception: access violation reading 0xFFFFFFFFFFFFFFFF
我曾嘗試使用 ctypes.c_buffer 或 ctypes.c_bytes 來更改參數類型,但它沒有用,
我怎樣才能以正確的方式傳遞參數?
或者如何以正確的方式在 python 中調用 C++?
謝謝
感謝@Jean-François Fabre
我找到了答案,正確的代碼應該是
hello.main(2,v1)
好像和調用'hello.exe'不一樣,我以為'argv'就像'self'一樣,之前不需要傳遞
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.