小编tos*_*bar的帖子

Python 3.5,ctypes:TypeError:期望的字节或整数地址而不是str实例

我遇到了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)

python ctypes

10
推荐指数
1
解决办法
9965
查看次数

ctypes,python3.5,OSError:异常:访问冲突写入0x00000000

研究其他类似的错误,我认为我有一个非法操作的问题,例如写不该写的地址。我不确定如何解决此问题。有什么帮助吗?

我得到的确切错误:

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)

python ctypes python-3.x python-3.5

6
推荐指数
1
解决办法
1万
查看次数

标签 统计

ctypes ×2

python ×2

python-3.5 ×1

python-3.x ×1