我遇到了ctypes的问题.我认为我的类型转换是正确的,错误对我没有意义."arg - ct.c_char_p(logfilepath)"行错误TypeError:预期的字节或整数地址而不是str实例
我试过python 3.5和3.4.
功能我打电话:
stream_initialize('stream_log.txt')
Run Code Online (Sandbox Code Playgroud)
Stream_initialize代码"
def stream_initialize(logfilepath):
f = shim.stream_initialize
arg = ct.c_char_p(logfilepath)
result = f(arg)
if result:
print(find_shim_error(result))
Run Code Online (Sandbox Code Playgroud) 研究其他类似的错误,我认为我有一个非法操作的问题,例如写不该写的地址。我不确定如何解决此问题。有什么帮助吗?
我得到的确切错误:
in GetSoftwareVersion()
result = f(LCP_Version, FCP_Version)
OSError: exception: access violation writing 0x00000000
Run Code Online (Sandbox Code Playgroud)
我正在调用的函数
x = GetSoftWareVersion()
print(x)
Run Code Online (Sandbox Code Playgroud)
GetSoftwareVersion()的内容
def GetSoftwareVersion():
f = shim.GetSoftwareVersion
LCP_Version = ct.c_char_p(0)
FCP_Version = ct.c_char_p(0)
result = f(LCP_Version, FCP_Version)
if result:
print(find_shim_error(result))
return LCP_Version.contents.value, FCP_Version.contents.value
Run Code Online (Sandbox Code Playgroud)
编辑:添加相关的C ++代码
PCSHIMDLL_API error_status_type GetSoftwareVersion(
char* LCP_Version,
char* FCP_Version
)
{
error_status_type return_status = SUCCESS;
string LCP_V("");
string FCP_V("");
LaserIDType_var laserID;
laserID = p_DiagIF->GetLaserID();
LCP_V = laserID->m_LCPSoftwareVersion;
FCP_V = laserID->m_FCPSoftwareVersion;
strcpy(LCP_Version, LCP_V.c_str());
strcpy(FCP_Version, FCP_V.c_str());
return return_status;
}
Run Code Online (Sandbox Code Playgroud)