diff --git a/pykd-0.3-2013.sln b/pykd-0.3-2013.sln index 900819c..8917209 100644 --- a/pykd-0.3-2013.sln +++ b/pykd-0.3-2013.sln @@ -1,7 +1,7 @@ п»ї Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 -VisualStudioVersion = 12.0.21005.1 +VisualStudioVersion = 12.0.40629.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{5A3C2DA6-AE91-4025-AC03-A58BD03CEBCD}" EndProject @@ -25,7 +25,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{D1F122 .nuget\NuGet.targets = .nuget\NuGet.targets EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{D1F1222A-A12B-4FD7-91A0-0AB6393A3169}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget (2)", ".nuget (2)", "{A13C500A-7AAF-4BDA-80F1-C59882D0AE58}" ProjectSection(SolutionItems) = preProject .nuget\NuGet.Config = .nuget\NuGet.Config .nuget\NuGet.exe = .nuget\NuGet.exe @@ -56,63 +56,111 @@ Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug_2.7|Win32 = Debug_2.7|Win32 Debug_2.7|x64 = Debug_2.7|x64 + Debug_3.5|Win32 = Debug_3.5|Win32 + Debug_3.5|x64 = Debug_3.5|x64 Release_2.7|Win32 = Release_2.7|Win32 Release_2.7|x64 = Release_2.7|x64 + Release_3.5|Win32 = Release_3.5|Win32 + Release_3.5|x64 = Release_3.5|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_2.7|Win32.ActiveCfg = Debug|Any CPU {3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_2.7|Win32.Build.0 = Debug|Any CPU {3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_2.7|x64.ActiveCfg = Debug|Any CPU + {3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.5|Win32.ActiveCfg = Debug|Any CPU + {3F0BE77E-19B0-4192-B432-44A25805BCB8}.Debug_3.5|x64.ActiveCfg = Debug|Any CPU {3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_2.7|Win32.ActiveCfg = Release|Any CPU {3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_2.7|x64.ActiveCfg = Release|Any CPU + {3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.5|Win32.ActiveCfg = Release|Any CPU + {3F0BE77E-19B0-4192-B432-44A25805BCB8}.Release_3.5|x64.ActiveCfg = Release|Any CPU {6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_2.7|Win32.ActiveCfg = Debug|Any CPU {6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_2.7|x64.ActiveCfg = Debug|Any CPU + {6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.5|Win32.ActiveCfg = Debug|Any CPU + {6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Debug_3.5|x64.ActiveCfg = Debug|Any CPU {6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_2.7|Win32.ActiveCfg = Release|Any CPU {6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_2.7|x64.ActiveCfg = Release|Any CPU + {6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.5|Win32.ActiveCfg = Release|Any CPU + {6471FEDC-3129-410F-BFFC-4BC89707E5EC}.Release_3.5|x64.ActiveCfg = Release|Any CPU {D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_2.7|Win32.ActiveCfg = Debug|Any CPU {D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_2.7|x64.ActiveCfg = Debug|Any CPU + {D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.5|Win32.ActiveCfg = Debug|Any CPU + {D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Debug_3.5|x64.ActiveCfg = Debug|Any CPU {D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_2.7|Win32.ActiveCfg = Release|Any CPU {D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_2.7|x64.ActiveCfg = Release|Any CPU + {D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.5|Win32.ActiveCfg = Release|Any CPU + {D78837DC-BF31-4FC4-88A5-7F2FADAFA795}.Release_3.5|x64.ActiveCfg = Release|Any CPU {3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_2.7|Win32.ActiveCfg = Debug|Win32 {3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_2.7|Win32.Build.0 = Debug|Win32 {3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_2.7|x64.ActiveCfg = Debug|x64 {3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_2.7|x64.Build.0 = Debug|x64 - {3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_2.7|Win32.ActiveCfg = Release_Static|Win32 - {3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_2.7|Win32.Build.0 = Release_Static|Win32 - {3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_2.7|x64.ActiveCfg = Release_Static|x64 - {3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_2.7|x64.Build.0 = Release_Static|x64 + {3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.5|Win32.ActiveCfg = Debug|Win32 + {3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.5|Win32.Build.0 = Debug|Win32 + {3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.5|x64.ActiveCfg = Debug|x64 + {3E9C538F-F060-4E86-AB7D-D44439615B63}.Debug_3.5|x64.Build.0 = Debug|x64 + {3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_2.7|Win32.ActiveCfg = Release|Win32 + {3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_2.7|Win32.Build.0 = Release|Win32 + {3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_2.7|x64.ActiveCfg = Release|x64 + {3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_2.7|x64.Build.0 = Release|x64 + {3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.5|Win32.ActiveCfg = Release_Static|Win32 + {3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.5|Win32.Build.0 = Release_Static|Win32 + {3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.5|x64.ActiveCfg = Release_Static|x64 + {3E9C538F-F060-4E86-AB7D-D44439615B63}.Release_3.5|x64.Build.0 = Release_Static|x64 {C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_2.7|Win32.ActiveCfg = Debug_2.7|Win32 {C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_2.7|Win32.Build.0 = Debug_2.7|Win32 {C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_2.7|x64.ActiveCfg = Debug_2.7|x64 {C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_2.7|x64.Build.0 = Debug_2.7|x64 + {C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.5|Win32.ActiveCfg = Debug_3.5|Win32 + {C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.5|Win32.Build.0 = Debug_3.5|Win32 + {C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.5|x64.ActiveCfg = Debug_3.5|x64 + {C4C45791-0201-4406-BC5C-A384B01E3BF5}.Debug_3.5|x64.Build.0 = Debug_3.5|x64 {C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_2.7|Win32.ActiveCfg = Release_2.7|Win32 {C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_2.7|Win32.Build.0 = Release_2.7|Win32 {C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_2.7|x64.ActiveCfg = Release_2.7|x64 {C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_2.7|x64.Build.0 = Release_2.7|x64 + {C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.5|Win32.ActiveCfg = Release_3.5|Win32 + {C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.5|Win32.Build.0 = Release_3.5|Win32 + {C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.5|x64.ActiveCfg = Release_3.5|x64 + {C4C45791-0201-4406-BC5C-A384B01E3BF5}.Release_3.5|x64.Build.0 = Release_3.5|x64 {0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_2.7|Win32.ActiveCfg = Debug|Win32 {0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_2.7|Win32.Build.0 = Debug|Win32 {0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_2.7|x64.ActiveCfg = Debug|x64 {0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_2.7|x64.Build.0 = Debug|x64 + {0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.5|Win32.ActiveCfg = Debug|Win32 + {0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.5|Win32.Build.0 = Debug|Win32 + {0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.5|x64.ActiveCfg = Debug|x64 + {0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Debug_3.5|x64.Build.0 = Debug|x64 {0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_2.7|Win32.ActiveCfg = Release|Win32 {0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_2.7|Win32.Build.0 = Release|Win32 {0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_2.7|x64.ActiveCfg = Release|x64 {0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_2.7|x64.Build.0 = Release|x64 + {0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.5|Win32.ActiveCfg = Release|Win32 + {0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.5|Win32.Build.0 = Release|Win32 + {0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.5|x64.ActiveCfg = Release|x64 + {0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF}.Release_3.5|x64.Build.0 = Release|x64 {CA0252CE-EF81-4DD8-A96F-A0E0E3644B7B}.Debug_2.7|Win32.ActiveCfg = Debug_2.7|Win32 {CA0252CE-EF81-4DD8-A96F-A0E0E3644B7B}.Debug_2.7|Win32.Build.0 = Debug_2.7|Win32 {CA0252CE-EF81-4DD8-A96F-A0E0E3644B7B}.Debug_2.7|x64.ActiveCfg = Debug_2.7|x64 {CA0252CE-EF81-4DD8-A96F-A0E0E3644B7B}.Debug_2.7|x64.Build.0 = Debug_2.7|x64 + {CA0252CE-EF81-4DD8-A96F-A0E0E3644B7B}.Debug_3.5|Win32.ActiveCfg = Debug_2.7|Win32 + {CA0252CE-EF81-4DD8-A96F-A0E0E3644B7B}.Debug_3.5|Win32.Build.0 = Debug_2.7|Win32 + {CA0252CE-EF81-4DD8-A96F-A0E0E3644B7B}.Debug_3.5|x64.ActiveCfg = Debug_2.7|x64 + {CA0252CE-EF81-4DD8-A96F-A0E0E3644B7B}.Debug_3.5|x64.Build.0 = Debug_2.7|x64 {CA0252CE-EF81-4DD8-A96F-A0E0E3644B7B}.Release_2.7|Win32.ActiveCfg = Release_2.7|Win32 {CA0252CE-EF81-4DD8-A96F-A0E0E3644B7B}.Release_2.7|Win32.Build.0 = Release_2.7|Win32 {CA0252CE-EF81-4DD8-A96F-A0E0E3644B7B}.Release_2.7|x64.ActiveCfg = Release_2.7|x64 {CA0252CE-EF81-4DD8-A96F-A0E0E3644B7B}.Release_2.7|x64.Build.0 = Release_2.7|x64 + {CA0252CE-EF81-4DD8-A96F-A0E0E3644B7B}.Release_3.5|Win32.ActiveCfg = Release_2.7|Win32 + {CA0252CE-EF81-4DD8-A96F-A0E0E3644B7B}.Release_3.5|Win32.Build.0 = Release_2.7|Win32 + {CA0252CE-EF81-4DD8-A96F-A0E0E3644B7B}.Release_3.5|x64.ActiveCfg = Release_2.7|x64 + {CA0252CE-EF81-4DD8-A96F-A0E0E3644B7B}.Release_3.5|x64.Build.0 = Release_2.7|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {3F0BE77E-19B0-4192-B432-44A25805BCB8} = {5A3C2DA6-AE91-4025-AC03-A58BD03CEBCD} - {0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF} = {5A3C2DA6-AE91-4025-AC03-A58BD03CEBCD} {EEFC9510-DFA7-439E-801E-48FCE72766AD} = {A7AF87D2-983B-4B3A-823F-5A2C6989672E} + {3F0BE77E-19B0-4192-B432-44A25805BCB8} = {5A3C2DA6-AE91-4025-AC03-A58BD03CEBCD} {6471FEDC-3129-410F-BFFC-4BC89707E5EC} = {AAB21DD2-B0EE-493E-8415-5195F18879EB} + {0E4CC688-F2F5-499F-9C07-0F2CAEE0D3EF} = {5A3C2DA6-AE91-4025-AC03-A58BD03CEBCD} EndGlobalSection EndGlobal diff --git a/pykd/packages.pykd_vc120.config b/pykd/packages.pykd_vc120.config index a29ebfd..3930ec6 100644 --- a/pykd/packages.pykd_vc120.config +++ b/pykd/packages.pykd_vc120.config @@ -7,4 +7,5 @@ - \ No newline at end of file + + diff --git a/pykd/pykd_vc120.vcxproj b/pykd/pykd_vc120.vcxproj index 412d088..7678cbe 100644 --- a/pykd/pykd_vc120.vcxproj +++ b/pykd/pykd_vc120.vcxproj @@ -9,6 +9,14 @@ Debug_2.7 x64 + + Debug_3.5 + Win32 + + + Debug_3.5 + x64 + Release_2.7 Win32 @@ -17,6 +25,14 @@ Release_2.7 x64 + + Release_3.5 + Win32 + + + Release_3.5 + x64 + {C4C45791-0201-4406-BC5C-A384B01E3BF5} @@ -32,12 +48,28 @@ true Unicode v120_xp + 2.7 + + + DynamicLibrary + true + Unicode + v120_xp + 3.5 DynamicLibrary true Unicode v120_xp + 2.7 + + + DynamicLibrary + true + Unicode + v120_xp + 3.5 DynamicLibrary @@ -45,13 +77,37 @@ true Unicode v120_xp + 2.7 + + DynamicLibrary + false + true + Unicode + v120_xp + 3.5 + DynamicLibrary false true Unicode v120_xp + 2.7 + + + DynamicLibrary + false + true + Unicode + v120_xp + 3.5 + + + v120 + + + v120 @@ -59,17 +115,30 @@ + + + + + + + + + + + + + - 50e91edb + 4bf1ae88 true @@ -79,6 +148,14 @@ $(Platform)\$(Configuration)\ $(SolutionDir)out\$(Platform)\$(Configuration)\ + + true + .pyd + true + $(ProjectName) + $(Platform)\$(Configuration)\ + $(SolutionDir)out\$(Platform)\$(Configuration)\ + true .pyd @@ -87,6 +164,14 @@ $(SolutionDir)out\$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ + + true + .pyd + true + $(ProjectName) + $(SolutionDir)out\$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + false .pyd @@ -94,6 +179,13 @@ $(Platform)\$(Configuration)\ $(SolutionDir)out\$(Platform)\$(Configuration)\ + + false + .pyd + $(ProjectName) + $(Platform)\$(Configuration)\ + $(SolutionDir)out\$(Platform)\$(Configuration)\ + false .pyd @@ -101,6 +193,14 @@ $(SolutionDir)out\$(Platform)\$(Configuration)\ $(Platform)\$(Configuration)\ + + false + .pyd + $(ProjectName) + $(SolutionDir)out\$(Platform)\$(Configuration)\ + $(Platform)\$(Configuration)\ + + Use @@ -123,6 +223,28 @@ + + + Use + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;PYKD_EXPORTS;%(PreprocessorDefinitions) + $(ProjectDir)..\kdlibcpp\include; + + + Windows + true + pykd.def + %(AdditionalLibraryDirectories) + + + copy $(OutDir)..\Debug\targetapp.exe $(OutDir) + + + + + + Use @@ -145,6 +267,28 @@ + + + Use + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;PYKD_EXPORTS;%(PreprocessorDefinitions) + $(ProjectDir)..\kdlibcpp\include; + + + Windows + true + pykd.def + %(AdditionalLibraryDirectories) + + + copy $(OutDir)..\Debug\targetapp.exe $(OutDir) + + + + + + Level3 @@ -168,6 +312,30 @@ copy $(OutDir)..\Release\targetapp.exe $(OutDir) + + + + Level3 + Use + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;PYKD_EXPORTS;%(PreprocessorDefinitions) + $(ProjectDir)..\kdlibcpp\include + MultiThreaded + + + Windows + true + true + true + pykd.def + %(AdditionalLibraryDirectories) + + + copy $(OutDir)..\Release\targetapp.exe $(OutDir) + + Level3 @@ -191,6 +359,29 @@ copy $(OutDir)..\Release\targetapp.exe $(OutDir) + + + Level3 + Use + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;PYKD_EXPORTS;%(PreprocessorDefinitions) + $(ProjectDir)..\kdlibcpp\include; + MultiThreaded + + + Windows + true + true + true + pykd.def + %(AdditionalLibraryDirectories) + + + copy $(OutDir)..\Release\targetapp.exe $(OutDir) + + @@ -216,20 +407,7 @@ - - false - false - - - - - false - false - - - - - + @@ -241,9 +419,13 @@ Create + Create Create + Create Create + Create Create + Create @@ -265,7 +447,8 @@ - + + @@ -279,6 +462,7 @@ + diff --git a/pykd/stdafx.h b/pykd/stdafx.h index de4f84f..f9920fd 100644 --- a/pykd/stdafx.h +++ b/pykd/stdafx.h @@ -11,7 +11,8 @@ // Windows Header Files: #include -#define BOOST_PYTHON_STATIC_LIB +//#define BOOST_PYTHON_STATIC_MODULE +//#define BOOST_PYTHON_STATIC_LIB #pragma warning(push) // 'return' : conversion from 'Py_ssize_t' to 'unsigned int', possible loss of data diff --git a/pykd/variant.h b/pykd/variant.h index 0305670..7f3ff39 100644 --- a/pykd/variant.h +++ b/pykd/variant.h @@ -32,11 +32,14 @@ public: return var; } +#if PY_VERSION_HEX < 0x03000000 + if ( PyInt_CheckExact( obj.ptr() ) ) { var->m_variant.setLong( PyLong_AsLong( obj.ptr() ) ); return var; } +#endif if ( _PyLong_Sign( obj.ptr() ) >= 0 ) var->m_variant.setULongLong( PyLong_AsUnsignedLongLong( obj.ptr() ) ); diff --git a/pykd/windbgext.cpp b/pykd/windbgext.cpp index d1ce213..c3035a9 100644 --- a/pykd/windbgext.cpp +++ b/pykd/windbgext.cpp @@ -24,50 +24,56 @@ bool PykdExt::isInit() { /////////////////////////////////////////////////////////////////////////////// +#if PY_VERSION_HEX >= 0x03000000 + +extern "C" PyObject* PyInit_pykd(); + +#else + extern "C" void initpykd(); +#endif void PykdExt::setUp() { WindbgExtension::setUp(); - PyImport_AppendInittab("pykd", initpykd ); +#if PY_VERSION_HEX >= 0x03000000 - PyEval_InitThreads(); + PyImport_AppendInittab("pykd", PyInit_pykd); + +#else + + PyImport_AppendInittab("pykd", initpykd); + +#endif Py_Initialize(); + PyEval_InitThreads(); + python::object main = boost::python::import("__main__"); - python::object main_namespace = main.attr("__dict__"); + python::object global = main.attr("__dict__"); python::object pykd = python::import( "pykd" ); - // делаем аналог from pykd import * - python::dict pykd_namespace( pykd.attr("__dict__") ); - - python::list iterkeys( pykd_namespace.iterkeys() ); - - for (int i = 0; i < boost::python::len(iterkeys); i++) - { - std::string key = boost::python::extract(iterkeys[i]); - - main_namespace[ key ] = pykd_namespace[ key ]; - } - python::object sys = python::import("sys"); sys.attr("stdout") = python::object( pykd::DbgOut() ); sys.attr("stderr") = python::object( pykd::DbgOut() ); sys.attr("stdin") = python::object( pykd::DbgIn() ); - python::list pathList(sys.attr("path")); + python::list pathList = python::extract(sys.attr("path")); python::ssize_t n = python::len(pathList); for (python::ssize_t i = 0; i < n ; i++) m_paths.push_back(boost::python::extract(pathList[i])); + python::exec("import pykd\n", global); + python::exec("from pykd import *\n", global); + m_pyState = PyEval_SaveThread(); } @@ -159,7 +165,29 @@ KDLIB_EXT_COMMAND_METHOD_IMPL(PykdExt, py) } else { - std::string scriptFileName = getScriptFileName( args[0] ); + + std::string scriptFileName = getScriptFileName(args[0]); + +#if PY_VERSION_HEX >= 0x03000000 + + // устанавиливаем питоновские аргументы + wchar_t **pythonArgs = new wchar_t* [ args.size() ]; + + std::wstring scriptFileNameW = _bstr_t(scriptFileName.c_str()); + + pythonArgs[0] = const_cast(scriptFileNameW.c_str()); + + for (size_t i = 1; i < args.size(); ++i) + { + std::wstring argw = _bstr_t(args[i].c_str()); + pythonArgs[i] = const_cast(argw.c_str()); + } + + PySys_SetArgv( (int)args.size(), pythonArgs ); + + delete[] pythonArgs; + +#else // устанавиливаем питоновские аргументы char **pythonArgs = new char* [ args.size() ]; @@ -172,6 +200,8 @@ KDLIB_EXT_COMMAND_METHOD_IMPL(PykdExt, py) PySys_SetArgv( (int)args.size(), pythonArgs ); delete[] pythonArgs; +#endif + // получаем достпу к глобальному мапу ( нужен для вызова exec_file ) python::object main = python::import("__main__");