[英]Run python script using python27.dll
是否可以使用 python27.dll 从 CLI 运行 .py 脚本? 我试过这个:
rundll32.exe python27.dll,PyRun_SimpleString "import myScript.py"
但似乎不起作用。
情况是我可以安装我想要的所有 python 模块,但没有可执行文件,所以我无法安装完整的 Python。
你不能这样做。 为什么?
Windows 包含一个名为rundll32.exe
的命令行实用程序,它允许您使用以下语法调用从 32 位 DLL 导出的函数:
RUNDLL.EXE <dllname>,<entrypoint> <optional arguments>
但是,根据 MSDN:
Rundll32 程序不允许您从任何 DLL 调用任何导出的函数
[..]
这些程序只允许您从 DLL 中调用函数,这些函数被显式编写为由它们调用。
dll
必须导出以下原型才能支持它:
void CALLBACK EntryPoint(HWND hwnd, HINSTANCE hinst,
LPSTR lpszCmdLine, int nCmdShow);
由于python.dll
不导出这样的入口点,因此您必须在 C/C++ 中编写一个包装应用程序来加载 dll 并使用它,例如(这里是这样一个应用程序的片段):
// load the Python DLL
#ifdef _DEBUG
LPCWSTR pDllName = L"python27_d.dll" ;
#else
LPCWSTR pDllName = L"python27.dll" ;
#endif
HMODULE hModule = LoadLibrary( pDllName ) ;
assert( hModule != NULL ) ;
// locate the Py_InitializeEx() function
FARPROC pInitializeExFn = GetProcAddress( hModule , "Py_InitializeEx" ) ;
assert( pInitializeExFn != NULL ) ;
// call Py_InitializeEx()
typedef void (*PINITIALIZEEXFN)( int ) ;
((PINITIALIZEEXFN)pInitializeExFn)( 0 ) ;
FILE* fp ;
errno_t rc = fopen_s( &fp , pFilename , "r" ) ;
assert( rc == 0 && fp != NULL ) ;
[..] // go on to load PyRun_SimpleFile
if ( 0 == PyRun_SimpleFile( fp , pFilename )
printf("Successfully executed script %s!\n", pFilename);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.