After much stumbling around in the dark I have the answer. The following table shows the results of tests which I performed pairing different build configurations of my WinMain() app with different python libraries. The terms "Release" and "Debug" refer to the configuration type in Visual Studio. All builds were done in x64 mode.
Debug | python36.lib | Works Debug | python36_d.lib | Works Debug | python3_d.lib | Works Debug | python3.lib | !!! CRASHES !!! Release | python36.lib | Works Release | python36_d.lib | Works Release | python3_d.lib | !!! CRASHES !!! Release | python3.lib | Works So, it seems to be the case that picking a mismatched python binary causes the crash, __but only with python3, not with python36__. This makes me wonder what the differences is between the two in the first place. I was getting the crash to begin with because I was linking my Debug build with the release build python3.lib, since I thought it shouldn't matter. My problem is fixed now, but if anyone could sheld light on the details of why exactly it happened then I would certainy be interested. On Mon, Aug 7, 2017 at 8:11 PM, Patrick Rutkowski <patrick.rutkow...@gmail.com> wrote: > I'm working on Windows. I have the following dead simple embedding > code that I'm using to test out the python interpreter: > > ============================================================ > > Py_SetProgramName(L"MyApp"); > > Py_SetPath( > L"C:\\Users\\rutski\\Documents\\python\\PCBuild\\amd64\\python36.zip;" > L"C:\\Users\\rutski\\Documents\\python\\DLLs;" > L"C:\\Users\\rutski\\Documents\\python\\lib;" > L"C:\\Users\\rutski\\Documents\\python\\PCBuild\\amd64;" > L"C:\\Users\\rutski\\Documents\\python;" > L"C:\\Users\\rutski\\Documents\\python\\lib\\site-packages"); > > Py_Initialize(); > > PyRun_SimpleString( > "from time import time,ctime\n" > "print('Today is', ctime(time()))\n"); > > ============================================================ > > This code crashes trying to access address 0x00000010 from within > PyRun_SimpleString(). The sequence of event's is this: > > 1) PyRun_SimpleString() tries to do AddModule("__main__") > 2) AddModule tries to do PyImport_GetModuleDict() > 3) PyImport_GetModuleDict() tries to doPyThreadState_GET()->interp > 4) PyThreadState_GET() returns NULL, so the ->interp part crashes. > > The weird thing is that calling PyImport_GetModuleDict() from within > my application directly works just fine. Weirder still is that the > whole thing actually executes fine if I build a windows command line > application with the embed code in main(), and execute it from a > terminal. The crash only happens when building a Windows GUI > application and calling the embed code in WinMain(). > > This is a python interpreter that I built from source on windows using > PCbuild\build.bat, so that I could track the crash. However, the exact > same crash was happening with the stock interpreter provided by the > python windows installer. > > Does anyone have any ideas here? > -Patrick _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com