[résolue][Linux] problem avec objectmanager.a

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

[résolue][Linux] problem avec objectmanager.a

Message par cha0s »

j'ai essayé de convertir le code de dri pour linux
http://www.purebasic.fr/french/viewtopi ... ght=object
sa compile et se lance mais tous ce que j'obtient c'est un invalid memory acces ....

Code : Tout sélectionner



CompilerIf #PB_Compiler_Thread ;>
  #ObjectManager = "compilers/objectmanagerthread.a"
CompilerElse ;=
  #ObjectManager = "compilers/objectmanager.a"
CompilerEndIf;<

Import #PB_Compiler_Home + #ObjectManager
  Object_GetOrAllocate   (Objects, Object.l) As "PB_Object_GetOrAllocateID"
  Object_GetObject       (Objects, Object.l) As "PB_Object_GetObject"
  Object_IsObject        (Objects, Object.l) As "PB_Object_IsObject"
  Object_EnumerateAll    (Objects, ObjectEnumerateAllCallback, *VoidData) As "PB_Object_EnumerateAll"
  Object_EnumerateStart  (Objects) As "PB_Object_EnumerateStart"
  Object_EnumerateNext   (Objects, *object.Long) As "PB_Object_EnumerateNext"
  Object_EnumerateAbort  (Objects) As "PB_Object_EnumerateAbort"
  Object_Free            (Objects, Object.l) As "PB_Object_FreeID"
  Object_Init            (StructureSize.l, IncrementStep.l, ObjectFreeFunction) As "PB_Object_Init"
  Object_GetThreadMemory (MemoryID.l) As "PB_Object_GetThreadMemory"
  Object_InitThreadMemory(Size.l, InitFunction, EndFunction) As "PB_Object_InitThreadMemory"
EndImport
Prototype ObjectFreeFunction(Object.l)

Structure PB_SimpleList
  *Next    .PB_SimpleList
  *Previous.PB_SimpleList
EndStructure

Structure CRITICAL_SECTION
  Par1.l
  Par2.l
  Par3.l
  Par4.l
  Par5.l
  Par6.l
EndStructure

Structure PB_Object
  ;
  StructureSize.l
  IncrementStep.l
  ObjectsNumber.l
  *ListFirstElement.PB_SimpleList
  ;
  FreeObject.ObjectFreeFunction
  ;
  Current.l
  *CurrentElement.PB_SimpleList
  ;
  CompilerIf #PB_Compiler_Thread ;>
    IncrementShift.l
    *FirstObjectsArea.PB_SimpleList
    *LastObjectsArea .PB_SimpleList
    ObjectMutex.CRITICAL_SECTION
  CompilerElse ;=
    *ObjectsArea
  CompilerEndIf ;<
  ;
EndStructure 

Structure TEST
  TEST.l
EndStructure

Declare freeobject(object.l)
Global obj = Object_Init(SizeOf(TEST), 1, @freeobject()) 

Procedure NewObject()
  Protected *this.TEST = Object_GetOrAllocate(obj, #PB_Any)
  If *this
    *this/TEST = 10
  EndIf
  ProcedureReturn *this
EndProcedure


Procedure freeobject(object.l)

EndProcedure

obj = NewObject()
Dernière modification par cha0s le mar. 14/août/2007 1:01, modifié 1 fois.
Anonyme

Message par Anonyme »

Salut !

Ligne 10 :

Met ImportC

Ligne 72 :

Remplace *this/TEST = 10 par *this.TEST = 10


@++ :wink:
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

c'est juste le importC qui me manquait merci, c'est la qu'on voie que la doc de pure n'est pas complete.
Avatar de l’utilisateur
Flype
Messages : 2431
Inscription : jeu. 29/janv./2004 0:26
Localisation : Nantes

Message par Flype »

pourquoi ?

ImportC est documenté - faut juste lire entre les lignes :

en
By default the imported function symbol is 'decorated' in the following way: _FunctionName@callsize.That should work for most of the functions which use the standard call convension (stdcall). If the library is a C one, and the function are not stdcall, the ImportC variant should be used instead. In this case, the default function symbol is decorated like: _FunctionName.
fr
Par défaut, le symbole de la fonction importée est décoré suivant le schéma suivant: _NomFonction@tailleargument.Cela devrait fonctionner pour la plupart des fonctions qui utilise la convention standard d'appel (stdcall). Par contre, si la bibliothèque est écrite en C, et que les fonctions exportées ne sont pas stdcall, ImportC devra être utilisé à la place de Import. Dans ce cas, par défaut le symbole est préfixé comme ceci: _NomFonction.
Image
Anonyme

Message par Anonyme »

Par défaut, le symbole de la fonction importée est décoré suivant le schéma suivant: _NomFonction@tailleargument.Cela devrait fonctionner pour la plupart des fonctions qui utilise la convention standard d'appel (stdcall). Par contre, si la bibliothèque est écrite en C, et que les fonctions exportées ne sont pas stdcall, ImportC devra être utilisé à la place de Import. Dans ce cas, par défaut le symbole est préfixé comme ceci: _NomFonction.
Sous linux , je n'ai jamais observé de fonction "décoré" ou avec un préfixe _Fct()
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Message par cha0s »

efectivement j'avait pas les yeux en faces des trouts *part se cacher*
Répondre