2017-10-11 14 views
1

python27.dllを使用してCLIから.pyスクリプトを実行することはできますか? 私はこれ試してみました:python27.dllを使用してpythonスクリプトを実行する

rundll32.exe python27.dll,PyRun_SimpleString "import myScript.py" 

をしかし、動作しないようです。

私が望むすべてのPythonモジュールをインストールできますが、実行可能ファイルはインストールできないため、完全なPythonをインストールできません。

+0

あなたが実行可能ファイルに変換することができ、その後、あなたは窓を使用しているexecution.Ifのための完全なPythonのセットアップをインストールする必要はありませんが.exeの形式に変換します。ビデオをチェックする==> https://www.youtube.com/watch?v=vPzc4OelblQ – rohitjoshi9023

答えて

1

これはできません。どうして?

Windowsは、次の構文を使用して32ビットDLLからエクスポートされた関数を呼び出すことができrundll32.exeという名前のコマンドラインユーティリティプログラムが含まれています

RUNDLL.EXE <dllname>,<entrypoint> <optional arguments> 

しかし、MSDNによると:

Rundll32のプログラムを使用すると、任意のDLLからエクスポートされた任意の関数を呼び出すことはできません

[..]

これらのプログラムでは、明示的に呼び出されるようにDLLから呼び出される関数のみを呼び出すことができます。

dllはそれをサポートするために、次のプロトタイプをエクスポートする必要があります。

void CALLBACK EntryPoint(HWND hwnd, HINSTANCE hinst, 
         LPSTR lpszCmdLine, int nCmdShow); 

python.dllは、このようなエントリポイントをエクスポートしませんので、あなたはDLLをロードするC/C++でラッパーアプリケーションを記述する必要があります(ここで、そのようなアプリケーションからの抜粋である)、例えば、それを使用する:

// 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); 

起源:Awasu.com firstsecondのチュートリアル

+0

<< rundll32.exeを使用して.dllファイルをロードすることはできません>> >>:そうは思われません、rundll32.exeが完了しましたその目的のために、私は思う。 –

+0

@ luca.vercelli、私は今私の説明が十分にはっきりしていないことを知っているので、私は精緻化した –

関連する問題