我的应用程序通过动态加载来嵌入python。我需要从正在执行的脚本的字典中获取值。在
pFnPyDict_GetItemString *pFGetItemString = NULL;
pFGetItemString = (pFnPyDict_GetItemString *)::GetProcAddress(hModulePython, PyDict_GetItemString);
if (pFGetItemString)
{
PyObject *pGet = pFGetItemString(pLocals, pVar);
if (pGet)
{
//The following code will not work as PyInt_Check is a macro
pFnPyInt_Check *pIsInt = (pFnPyInt_Check *)::GetProcAddress(hModulePython, "PyInt_Check");
if (PyInt_Check(get))
{
}
// There fore i am using PyObject_IsInstance
pFnPyObject_IsInstance *pFIsInstance = (pFnPyObject_IsInstance*)::GetProcAddress(hModulePython, "PyObject_IsInstance");
if (pFIsInstance)
{
int i = pFIsInstance(pGet, (PyObject*)&PyInt_Type); ----> the problem is here. This call fails.
}
}
}
如何将第二个参数指定给PyObject_IsInstance?这里我想检查pGet中的值是否为int类型
您只想检查} 。在
ints
吗?如果是这样,最好使用^{附加:一些你没有要求但可能对你有帮助的建议。)你使用C还是C++?如果是后者,请考虑使用Boost.Python而不是PythonC API—这会使事情变得简单得多。使用Boost公开函数和类很简单。在
当然,这里正确的方法是包含头文件并使用
PyInt_Check()
。在我假设您没有包括pythoncapi头文件,因为您不想使用隐式链接。但是你试图在没有头文件的情况下工作,这让你的生活变得艰难。仅仅因为包含头文件,并不意味着DLL函数将隐式链接到您的程序。只有在实际调用DLL中的一些函数时才会发生这种情况。在
如果你想百分之百确定你没有隐式链接到DLL,那么只需确保你没有链接.lib文件。在
相关问题 更多 >
编程相关推荐