簡體   English   中英

ctypes,python3.7,OSError:異常:訪問沖突讀取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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM