[英]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.