2012-09-15 2 views
3

Direct3D 및 Python으로 된 작은 프로그램을 C++로 작성했습니다. 창을 만들었고 모든 것이 잘 작동합니다. 하지만 "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 w 가입일

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

Welcome to StackOverflow! 코드를 * 표시하십시오. 그렇지 않으면 누구도 귀하를 도울 수 없습니다. (문제와 관련이없는 코드 부분을 제거하고 재현 가능한 작은 예제를 만드는 것이 바람직 함) –

+0

코드 예제를 제공 할 수 있습니까? 함수 호출만으로는 말하기 어렵습니다. – Borgleader

+0

몇 가지 예를 추가했습니다! – Freakyy

답변

0

hat 내가 아는 한, Py_Initialize()는 단순히 파이썬 자체를 초기화하지만 대화 형 인터프리터는 이 아닙니다. 이 시점에서 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++ 코드에서 대화 형 쉘을 실행합니다. 여기에 무슨 일이 일어나고 있는지 생각해보십시오. 파이썬을 초기화하면됩니다. 스크립트/명령을 전달하지 않아도 상관 없습니다.

희망이 있습니다.

관련 문제