0
我正在寫一個正被使用,如下一個Python腳本調用的DLL:ctypes的
//sample.h
#include<stdio.h>
typedef struct _data
{
char * name;
}data,*xdata;
__declspec(dllexport) void getinfo(data xdata,HRESULT *error);
//sample.c
#include<stdio.h>
#include"sample.h"
void get(data xdata,HRESULT *error)
{
//something is being done here
}
現在,用於調用上述功能的Python腳本被如下所示:
//sample.py
import ctypes
import sys
from ctypes import *
mydll=CDLL('sample.dll')
class data(Structure):
_fields_ = [('name',c_char_p)]
def get():
xdata=data()
error=HRESULT()
mydll=CDLL('sample.dll')
mydll.get.argtypes=[POINTER(data),POINTER(HRESULT)]
mydll.get.restype = None
mydll.get(xdata,error)
return xdata.value,error.value
xdata=get()
error=get()
print "information=",xdata.value
print "error=", error.value
但是我運行python腳本後得到的錯誤是:
Debug Assertion Failed!
Program:C:\Python27\pythonw.exe
File:minkernel\crts\ucrt\src\appcrt\stdio\fgets.cpp
Expression:stream.valid()
任何人可以幫助我在SOLV問題是什麼?而我寫的python腳本,是寫它的正確方法嗎?
的錯誤指示使用不創建控制檯的'pythonw.exe'。 'fgets()'沒有顯示在你的代碼中,但是如果它試圖從'stdin'讀取這個沒有控制檯的無效流。 –
我注意到的另一件事是'data xdata'是'getinfo'的一個參數。這種類型在Python中不是'POINTER(data)',而只是'data'。 –
你也從Python get()中返回了兩個值,所以'xdata,error = get()'而不是'xdata = get()'和'error = get()'。 –