2012-09-15 33 views
3

我正在用C++写一个Direct3D和Python的小程序。 我创建了我的窗口,一切工作正常。但是如果我尝试调用“Py_Initialize();”我的程序关闭。C++ Python关闭我的程序

(它以代码1结尾) 问题是什么?

编辑:这里是我的代码的一些部分。

MainIncludes.h

#include "Windows.h" 
#include <d3d9.h> 
#pragma comment (lib, "d3d9.lib") 

#include <d3dx9.h> 
#pragma comment (lib, "d3dx9.lib") 

main_d3dwindow.cpp

int WINAPI WinMain(HINSTANCE hInstance, 
       HINSTANCE hPrevInstance, 
       LPSTR lpCmdLine, 
       int nCmdShow) 
{ 
HWND hWnd; 
WNDCLASSEX wc; 

ZeroMemory(&wc, sizeof(WNDCLASSEX)); 

wc.cbSize = sizeof(WNDCLASSEX); 
wc.style = CS_HREDRAW | CS_VREDRAW; 
wc.lpfnWndProc = WindowProc; 
wc.hInstance = hInstance; 
wc.hCursor = LoadCursor(NULL, IDC_ARROW); 
wc.hbrBackground = (HBRUSH)COLOR_WINDOW; 
wc.lpszClassName = L"WindowClass"; 

RegisterClassEx(&wc); 

hWnd = CreateWindowEx(NULL, 
         L"WindowClass", 
         L"Program", 
         WS_OVERLAPPEDWINDOW, 
         300, 300, 
         800, 600, 
         NULL, 
         NULL, 
         hInstance, 
         NULL); 

ShowWindow(hWnd, nCmdShow); 
mainWindow = hWnd; 

initD3D(hWnd); 
init_python(); 

MSG msg; 

while(TRUE) 
{ 
    while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) 
    { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 

    if(msg.message == WM_QUIT) 
     break; 

    render_frame(); 
} 

cleanD3D(); 

return msg.wParam; 
} 

main_python.cpp

#include "Python.h" 
void init_python() { 
    Py_Initialize(); 
} 
+2

欢迎的StackOverflow!请*显示*代码,否则任何人都无法帮助您。 (最好创建一个可重复使用的小例子,删除与该问题无关的部分代码) –

+0

您能否提供一个代码示例?只用函数调用很难说。 – Borgleader

+0

我加了一些例子! – Freakyy

回答

0

与W我知道,Py_Initialize()只是初始化Python本身,而不是作为交互式解释器。此时,Python正在运行,但正在等待 以执行命令。另外,你不应该忘记调用Py_Finalize()来释放内存。

void pythonShell() { 
    Py_Initialize(); 
    std::string pythonCommand = "execfile('python_script.py')"; // file or python command 
    PyRun_SimpleString(pythonCommand.c_str()); 
    FILE* fp = stdin; 
    char filename[] = "Embedded"; 
    PyRun_InteractiveLoop(fp, filename); 
    Py_Finalize(); 
} 

的PyRun_InteractiveLoop()函数,如果你希望它从你的C++代码执行交互shell。 我认为这里发生的事情是,你只是初始化Python,就是这样,它没有任何事情要做,因为你不传递任何脚本/命令。

希望这有助于