使用python27.dll运行python脚本

时间:2017-10-11 13:40:19

标签: python dll command-line-interface

是否可以使用python27.dll从CLI运行.py脚本? 我试过这个:

/* Custom dropdown */
.custom-dropdown {
  position: relative;
  display: inline-block;
  width:150px;
}

.custom-dropdown select {
    -webkit-appearance: none;
}

.custom-dropdown::before,
.custom-dropdown::after {
  content: "";
  position: absolute;
  pointer-events: none;
}

.custom-dropdown::after { /*  Custom dropdown arrow */  
    border-left: 5px solid transparent;
    border-right: 5px solid transparent;
    border-top: 5px solid #000;
    right: 60px;
    top: calc(50% - 2.5px);
    z-index: 3;
}

.custom-dropdown::before { /*  Custom dropdown arrow cover */
    position: absolute;
    right: 0px;
    height: 34px;
    z-index: 9999;
    content: 'mm';
    background: #afa9a9;
    border-left: 1px solid;
    top: 0px;
    padding-top: 6px;
    padding-left: 10px;
    padding-right: 10px;
    font-weight: bold;
}


.custom-dropdown::after {
  color: rgba(0,0,0,.4);
}

但似乎没有用。

情况是我可以安装我想要的所有python模块,但是没有可执行文件,所以我无法安装完整的Python。

1 个答案:

答案 0 :(得分:2)

你不能这样做。为什么呢?

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

来源:Awasu.com firstsecond教程