DLL 中的 Python (c++) Visual Studio
Posted
技术标签:
【中文标题】DLL 中的 Python (c++) Visual Studio【英文标题】:Python in DLL (c++) Visual studio 【发布时间】:2014-01-25 23:11:42 【问题描述】:我有 Visual Studio,我尝试通过 DLL 注入在 GAME 中执行 python。
这是我的代码:
#include "windows.h"
#define MS_NO_COREDLL
#include <Python.h>
#include <detours.h>
#include "stdafx.h"
#include <string>
#include <sstream>
#include <iostream>
#include <fcntl.h>
#pragma comment(lib, "detours.lib")
using namespace std;
void pickupitem()
PyObject* args = PyTuple_New(0);
PyObject* ret = PyObject_Call(PyObject_GetAttrString(PyImport_ImportModule("player"), "PickCloseItem"), args, NULL);
double result = PyFloat_AsDouble(ret);
Py_DECREF(ret);
Py_XDECREF(args);
//return result;
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
switch (ul_reason_for_call)
case DLL_PROCESS_ATTACH:
pickupitem();
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
break;
return TRUE;
它编译得很好,但是我的“Winject”(注入 DLL 的程序)出错了,没有说明问题。
当我编辑我的代码并将其更改为:
case DLL_PROCESS_ATTACH:
MessageBoxA(NULL, (LPCSTR) "WORK!", (LPCSTR) "YES !", NULL);
pickupitem();
break;
我看到了 2x WORK!但 winject 仍然返回错误。
我认为这是 Visual Studio 编译器的错误,你能告诉我怎么了吗?
我已经安装了 python2.7.6 添加文件夹 /libs 到链接器,和 /include 到编译器。
可以调试这个dll,知道问题出在哪里了吗?
最好的问候。
【问题讨论】:
你有什么版本的 Visual Studio?我知道在编写扩展时,用于构建扩展的 VS 版本必须与用于编译 Python 的版本相同。不过,不确定它是否适用于嵌入。 2013版我也下载了VS的python扩展 【参考方案1】:如何添加对 Py_Initialize() 和 Py_Finalize() 的调用,请参阅 http://docs.python.org/2/c-api/init.html
【讨论】:
注入我的 dll 的程序崩溃;x 我在 python 2.7.6 上运行,在这个游戏目录中我看到“python22.dll”我粘贴在那里 python27.dll 但我知道它包含在游戏中。 (游戏 - metin2 ;p) 有人知道吗?:D 尝试先运行等效的 Python 脚本。import player ret=player.PickCloseItem() print ret在 Python API 调用过程中可能会出现一些异常/错误,请尝试将第二行分成三行,并在这些调用之间添加一些异常处理调用。docs.python.org/2/c-api/exceptions.html
以上是关于DLL 中的 Python (c++) Visual Studio的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式列出 C++ 或 Python 中的 DLL 依赖项?
如何从 python 访问 C++ dll 中的函数,我只有一个包(一个头文件和一个 dll 文件)