mani sabri wrote:
> I want to run a Python shell from a DllMain() function.
>
It isn't safe to do this much processing in a DllMain. There is a thing
called the "loader lock" that is held while DllMain is called, and it
can prevent you from loading other DLLs. You might try spinning off a
thread to do your real work.
> This is what I came up with so far:
>
> BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID
> lpReserved)
> {
> //----
> switch(ul_reason_for_call)
> {
> case DLL_PROCESS_ATTACH:
> {
> if (!Py_IsInitialized())
> {
> BOOL res = AllocConsole();
>
> //I was going to use the handles but I heard its not the way to do
> that
> //HANDLE OutHand = GetStdHandle(STD_OUTPUT_HANDLE);
> //HANDLE InHand = GetStdHandle(STD_INPUT_HANDLE);
> //HANDLE ErrHand = GetStdHandle(STD_ERROR_HANDLE);
>
> //Redirecting console
> freopen("CONOUT$","w",stdout);
> freopen("CONIN$","w",stdin);
> freopen("CONERR$","w",stderr);
>
Do you really think "w" is correct for all three of those?
> //the printf prints on the new console after redirection
> printf("test");
>
> //opening stdout and stdin files to pass to python for redirection
> FILE* afile = fopen("CONOUT$", "w+");
> FILE* bfile = fopen("CONIN$", "w+");
>
Again, do you really think you want "w+ for both of these? How much
writing will you do to stdin?
> Py_Initialize();
> if (!Py_IsInitialized()) return(FALSE);
>
> //the bellow lines , instead of redirecting python crashes the dll
> PySys_SetObject("stdout", PyFile_FromFile(afile, "test","wb",
> fclose));
> PySys_SetObject("stdin", PyFile_FromFile(bfile, "CONIN$","wb",
> fclose));
>
Again, you're probably going to want to read from stdin, not write to
it. And you don't really need to do the fopen yourself:
PyFileObject* xout = PyFile_FromString( "CONOUT$", "wb" );
PyFileObject* xin = PyFile_FromString( "CONIN$", "rb" );
PySys_SetObject( "stdout", xout );
PySys_SetObject( "__stdout__", xout );
PySys_SetObject( "stdin", xin );
PySys_SetObject( "__stdin__", xin );
--
Tim Roberts, [EMAIL PROTECTED]
Providenza & Boekelheide, Inc.
_______________________________________________
python-win32 mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-win32