gpt4 book ai didi

python - python中允许使用字符指针吗?

转载 作者:行者123 更新时间:2023-11-28 00:12:22 25 4
gpt4 key购买 nike

我正在使用基于 C++ 的库,它的返回类型是 char 指针。我在 Python 中调用这个 C++ 函数。

我的问题是,我可以从 Python 中删除在 C++ 函数中分配的内存吗?

Python代码

    lib.TagGetName.restype = c_char_p
lib.TagGetName.argtypes=[c_int]
data = 1
cmt = (b"this is comment for Voltage")
result = lib.TagGetName(data)

Python 输出

Kernel process terminated for restart. (0)
Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) on Windows (32 bits).
This is the IEP interpreter.
Type 'help' for help, type '?' for a list of *magic* commands.

运行脚本:“D:\QTDev\test.py”

1
SELECT sTagName FROM TagDataInfo where iTagId = 1;
Return value--> b'Voltage\xfd\xfd\xfd\xfd\xdd`\x18x'

print ("Return value-->" , result)

C++函数代码

USE_MATH char* TagGetName(int iTagId)
{

char* cName;
//string cName = "";
sqlite3_stmt *stmtCreate = NULL;
sqlite3 *m_pdbObj;

cout<<iTagId<<endl;
if (sqlite3_open_v2("D:\\QTDev\\forPythonDLL\\Neha_Test_Use\\TagData", &m_pdbObj, SQLITE_OPEN_READWRITE, NULL) != SQLITE_OK)
{
return cName;
}

char cQuery[1024] = {0};
sprintf(cQuery,"SELECT sTagName FROM TagDataInfo where iTagId = %d;",iTagId);
cout<<cQuery<<endl;

if (sqlite3_prepare_v2(m_pdbObj, cQuery, -1, &stmtCreate, 0) == SQLITE_OK)
{
sqlite3_step(stmtCreate);
if(sqlite3_column_text(stmtCreate, 0))
{

cName = new char[strlen((char*)sqlite3_column_text(stmtCreate, 0))+1];
memset(cName,0x00,(strlen((char*)sqlite3_column_text(stmtCreate, 0))+1));
memcpy(cName,(char*)sqlite3_column_text(stmtCreate, 0),strlen((char*)sqlite3_column_text(stmtCreate, 0)));
cout<<"Cname="<<cName<<endl;
cout<<"Database Name="<<(char*)sqlite3_column_text(stmtCreate, 0)<<endl;
}
sqlite3_finalize(stmtCreate);
}
else
{
return cName;
}

sqlite3_exec(m_pdbObj, "COMMIT", 0, 0, 0);
return cName;
}

最佳答案

在 Python 中,您不能删除在 C++ 中分配的内存。您将不得不从 C++ 中导出另一个函数,它只包装 free()/delete 调用,然后从 python 中调用它。

顺便说一句,请记住 python 使用的是 UTF-16 而 C++ 可能使用的是 UTF-8,并且需要进行一些字符串转换(ctype 可以正确地完成此操作)

关于python - python中允许使用字符指针吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32304112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com