Re: [python-win32] Embedded Python & win32api

2008-06-21 Thread Howard Lightstone
> > I'm getting crasy about embedding python-win32 in a c++ application.
--snip--

I had the same issue.  Here is the sequence I evolved from both 2.2 and 2.5
implementations (and working in production code although this code IS
just at part of the stuff):


// some tables I use
char *plines[]=
{
"import sys\n",
"",
"@",
"@\\dlls",
"@\\libs",
"@\\win32\\lib",
"@\\win32",
//  my special stuff was here - notably my DebugWin to catch 
// stdout/stderr and pop them up in a tk window
NULL
};

// a utility function
char *
doubleup(char *input)
{
static char ans[MAX_PATH];
char *a = ans;

while (*input)
{
if (*input == '\\')
*a++ = '\\';
*a++ = *input++;
if (a >= &ans[MAX_PATH-1])
break;
}
*a++=0; // ensure 0 termination
return ans;
}


// the fragment from my main where I set things up
// please note. not every variable is defined in this fragment!!


p=getenv("PATH");
if (!p)
{
MessageBox(GetDesktopWindow(),
  "No PATH found!!!","* Failure",MB_OK);
exit(4);
}
if (strlen(p) >= sizeof(lpath))
{
MessageBox(GetDesktopWindow(),"PATH too 
long","*Failure",MB_OK);
exit(4);
}
strncpy(lpath,"PATH=",sizeof(lpath));
strncpy(ulpath,p,sizeof(ulpath));
_strupr(ulpath);
i=0;
if (!strstr(ulpath,"mylocalpath\\PYTHON25\\DLLS"))
{
i=1;
}
strncat(lpath,p,sizeof(lpath));
strncpy(local,StartupDir,sizeof(local));
_strupr(local);
if (!strstr(ulpath,local))
{
i |= 2;
}
// make sure I come first in paths- 
// otherwise stupid Windoze can't find some DLLs if the are included
// by other DLLs since the search path is DIFFERENT than that used by 
//the first inclusion (usually)

if (i)
{
ulpath[0]=0;
if (i & 2)
{   // put me first
strncat(ulpath,local,sizeof(ulpath);
strncat(ulpath,";",sizeof(ulpath));
}
if (i & 1)
{ // put my local Python dirs at the the beginning of the path

strncat(ulpath,"mylocalpath\\Python25;mylocalpath\\Python25\\DLLs;",
 sizeof(ulpath));
}
strncat(ulpath,lpath,sizeof(ulpath));

_putenv(lpath);
}

_putenv("PYTHONHOME=mylocalpath\\Python25");
_putenv("PYTHONPATH="); // remove from environment - it never worked 
correctly

//using TCL???
_putenv("TCL_LIBRARY=mylocalpath\\python25\\tcl\\tcl8.4");

// moving on
// put my startup path here too so I can 'find' modules to import
strncpy(local,"sys.path.insert(0,   '");
strcat(local,doubleup(StartupDir));
strcat(local,"')\n");
plines[1]=_strdup(local);



// alt this and now we are finally ready to do some "pythoning"

/* Pass argv[0] to the Python interpreter */
Py_SetProgramName(filename);// this is the "startup" filename 
with a path on it

/* Initialize the Python interpreter.  Required. */
Py_Initialize();
// initialize thread support
PyEval_InitThreads();

// different logic goes in here if if using Python before 2.5

PySys_SetArgv(1, argvx);// some array is REQUIRED else error 
on argv !

// this pre-imports some modules for me 

for (i=0;plines[i];++i)
{
char *pl;
pl=plines[i];
if (pl[0] == '@')
{
strcpy(local,"sys.path.append('");
strcat(local,doubleup("mylocalpath\\Python25));
strcat(local,doubleup(&pl[1]));
strcat(local,"')\n");
pl=local;   
}
// execute some python code
emsg[0]=0;
if (PyRun_SimpleString(pl) == -1)
{

PyErr_Fetch (&ptype, &pvalue, &ptrace);

sprintf(local,"err on %s \n\n%s",plines[i],emsg);
MessageBox(NULL,local,"Error",MB_OK );
}
}

// this point, the interpreter is working and has had some basic modules 
imported

// I have callbacks from python into my C++ code so
PyImport_AddModule("pyaccess");
   Py_InitModule("pyaccess", pyaccess_methods);

// start me up
ans=PyRun_SimpleString("import mymainpythonmodule\n");

// note that all my Python code actually runs in this import 
(mymainpythonmodule)
// but something else could run/rerun at this point

___
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32


Re: [python-win32] P3K?

2008-06-21 Thread bob gailer
IBM 650 anyone? Punched card i/o. 2000 word drum memory ( each word = 10 
decimal digits).

First language: machine language.
Then assembler and a precursor of Basic called Classmate.
PL/I
Then the first breath of fresh air: APL. A lot like Python in that it 
made programming a LOT easier.

On and on ...
Now Python.
Still longing for a way to integrate some aspects of APL into Python.

--
Bob Gailer
919-636-4239 Chapel Hill, NC

___
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32