186Fermer188
Kevin KoflerLe 31/01/2004 à 14:25
Mais la méthode propre, c'est:
#define EXECUTE_IN_GHOST_SPACE
au début de ton programme, et:
  char *fptr, *cptr;
  unsigned short plen;
  SYM_ENTRY *SymPtr = DerefSym (SymFind (SYMSTR ("example")));
  HANDLE h;
  if (!SymPtr) fatal ("Program not found");
  h = SymPtr->handle;
  if (HeapGetLock (h))
    {
      cptr = fptr = HeapDeref (h);
      h = 0;
    }
  else
    {
      cptr = fptr = HLock (h);
    }
  plen = *(short*)(cptr) + 3;
  if (SymPtr->flags.bits.archived)
    {
      if (!(cptr = malloc (plen)))
        {
          if (h) HeapUnlock (h);
          fatal ("Out of memory");
        }
      memcpy (cptr, fptr, plen);
    }
  EX_patch (cptr + 0x40002, cptr + plen + 0x3FFFE);
  push_END_TAG(); 
  push_ANSI_string("maths"); // paramètre FTL Parser : nom du fichier TEXT 
  ASM_call (cptr + 0x40002);
  if (h) HeapUnlock (h);
  if (cptr != fptr) free (cptr);