Seite 1 von 1

Marshal Embedded Commands

Verfasst: Samstag 13. September 2008, 01:21
von DonnerCobra
Hi!

Ich habe eine Frage, und zwar habe ich eine PYC Datei die ich auf meinem System kompiliert habe. Jedoch stürzt Windows immer beim Aufruf von PyMarshal_ReadObjectFromFile(FILE* p) ab.

Hat damit evtl. jemand Erfahrung.

Code: Alles auswählen

static FILE *check_compiled_module (char * cpathname)
{
  FILE *fp;
  long magic;
  long pyc_mtime;

  fp = fopen (cpathname, "rb");
  if (fp == NULL)
    return NULL;
  
  magic = PyMarshal_ReadLongFromFile (fp);
  if (magic != PyImport_GetMagicNumber())
    {
      fclose(fp);
      return NULL;
    }
  
  pyc_mtime = PyMarshal_ReadLongFromFile (fp);

  return fp;
}


int main(){
	PyObject *main, *maindict, *result, *error; PyCodeObject *code;
	Py_Initialize();

	FILE * fp;
	long mtime;


	main = PyImport_AddModule ("__main__");
		if (!main)
			return false;

	maindict = PyModule_GetDict (main);

	if ((fp = check_compiled_module ("C:/test.pyc")))
	{ 
	code = (PyCodeObject *)PyMarshal_ReadObjectFromFile (fp);
		if (! code)
			return false;
	}


 result = PyEval_EvalCode (code, maindict, maindict);
 Py_DECREF (code);

  Py_XDECREF (result);

	if ((error = PyErr_Occurred()))
		if (error != PyExc_SystemExit)
			PyErr_Print();

Py_Finalize();
return true;

}

Auf Mac läuft alles bestens und ohne Probleme.

Ich danke euch. P.S. Das Problem besteht bei Windows 32, und 64.

Cu

Verfasst: Samstag 13. September 2008, 12:55
von DonnerCobra
Hi!

Ich habe einen schnippsel im Internet gefunden, dort genau dasselbe Problem. Unter Mac läuft alles wunderbar, unter Windows stürzt PyMarshal_ReadObjectFromFile() einfach ab.

Ich kann es mir nicht erklären :-/.

Wie gesagt, eventuell hat einer einen Rat.
Bye!

Verfasst: Samstag 13. September 2008, 20:05
von DonnerCobra
Hi!

Kann es sein das das Marshal Modul auf C Ebene sowieso einen Bug hat?

Selbst der Code hier funktioniert unter OSX Leopard wunderbar, unter Windows jedoch verabschiedet sich das Programm.

Code: Alles auswählen

int main (int argc, char * const argv[]) {
	Py_Initialize();
 
	FILE* fp = fopen("/Users/test/Desktop/123.pyc","wb");
	PyCodeObject* op = (PyCodeObject*)Py_CompileString("import sys\nprint 'hello'","<string.py>",Py_file_input);
	PyMarshal_WriteObjectToFile((PyObject *)op, fp, Py_MARSHAL_VERSION);
 
	Py_Finalize();
 
    return 0;
}