3

C++ で Direct3D と Python を使用して小さなプログラムを作成しています。ウィンドウを作成しましたが、すべて正常に動作しています。しかし、「Py_Initialize();」を呼び出そうとすると 私のプログラムは閉じます。

(コード 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();
}
4

1 に答える 1

0

私の知る限り、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++ コードからインタラクティブ シェルを実行します。ここで起こっていることは、Python を初期化するだけで、スクリプト/コマンドを渡さないため、何もする必要がないと思います。

お役に立てれば

于 2015-06-25T15:26:20.427 に答える