C vers PB : wrapping super chiant

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
eddy
Messages : 67
Inscription : mer. 09/avr./2008 2:08

C vers PB : wrapping super chiant

Message par eddy »

Je suis entrain de wrapper la librairie Chipmunk ( moteur physique 2D )
Et je me rends compte que l'importation sous PB est limité.

Je suis obligé de faire des MACROs de malade et de parser le code dans tous les sens pour utiliser une simple fonction C

Il faudrait étendre la fonctionnalité ImportC.
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Re: C vers PB : wrapping super chiant

Message par beauregard »

eddy a écrit :Je suis entrain de wrapper la librairie Chipmunk ( moteur physique 2D )
Et je me rends compte que l'importation sous PB est limité.

Je suis obligé de faire des MACROs de malade et de parser le code dans tous les sens pour utiliser une

Il faudrait étendre la fonctionnalité ImportC.
il y a quelques mois j'ai fait mumuse avec Chipmunk :)
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86
eddy
Messages : 67
Inscription : mer. 09/avr./2008 2:08

Message par eddy »

Je vais fournir une nouvelle version à partir de la 4.1.0
Parce que la précédente version n'était pas de moi.

Elle sera plus proche du code original.
Par contre je ne sais pas si elle va marcher pour les 64bits :roll:
Anonyme

Message par Anonyme »

Comment tu importes ? via une lib une dll ?
eddy
Messages : 67
Inscription : mer. 09/avr./2008 2:08

Message par eddy »

une lib
J'ai ajouté un projet PelleC pour le compiler.
Anonyme

Message par Anonyme »

C'est très simple , pas besoin de te faire chier avec des macro 8O
Chipmunk est OO ?

Fait voir un bout de ton wrapp pb.
eddy
Messages : 67
Inscription : mer. 09/avr./2008 2:08

Message par eddy »

non c'est du C
C'est surtout le passage des structures en paramètre qui alourdit mon code.

Code : Tout sélectionner

Macro CONST : : EndMacro ;/// Unsigned Int
Macro UINT : l : EndMacro ;/// Constant
Macro _void_POINTER : i : EndMacro
Macro _cpShape_POINTER : i : EndMacro
Macro PARAM_cpVect(ParamName) : ParamName#_x.f, ParamName#_y.f : EndMacro
Macro READ_cpVect(ParamName) : ParamName\x, ParamName\y : EndMacro

Structure cpVect
	x.f: y.f
EndStructure

CompilerIf 0
	Procedure._cpShape_POINTER cpPolyShapeNew (*body.cpBody, numVerts.i, *verts.cpVect, offset.cpVect):EndProcedure 
CompilerEndif 



ImportC "..\Chipmunk\Chipmunk.lib"
	PrototypeC cpSpaceBodyIterator (*body.cpBody, *datas)
	cpInitChipmunk ()
	cpMomentForCircle.f (m.f, r1.f, r2.f, PARAM_cpVect(offset))
	cpMomentForPoly.f (m.f, CONST numVerts.i, *verts.cpVect, PARAM_cpVect(offset))
	cpSegmentShapeNew._cpShape_POINTER (*body.cpBody, PARAM_cpVect(a), PARAM_cpVect(b), r.f)
	cpvforangle (*RESULT.cpVect, CONST a.f)

....
EndImportC
Anonyme

Message par Anonyme »

Bon , tu t'alourdis pour rien.
tu n'est pas obliger d'avoir les structures de Chipmunk dans pb.
tu va me dire , oui , mais comment je manipule les éléments de structure ?
tu fait des fonctions en c que tu exportes.

ex :
extern "C"
{

__declspec(dllexport) MaClass * CreateBody()
{
MaClass *A = new MaClass;
return A;
}


}
Cette fonction bidon (qui est en c++) te retourne une classe , comment la récuperer en PB ? très simple :

Code : Tout sélectionner

ImportC :
CreateBody.i ()
endImport
le principe est le même pour du c. bosse avec des pointeurs. créer des Accesseurs en c pour modifier le contenu des strutures.


EDIT :


Pour les paramètres c'est la même chose :
extern "C"
{

__declspec(dllexport) void FreeBody(MaClass *body)
{
delete(body);
}


Code : Tout sélectionner

ImportC :
FreeBody (body.i)
endImport
}
eddy
Messages : 67
Inscription : mer. 09/avr./2008 2:08

Message par eddy »

C'est pas la voie que j'ai choisi
car si je suis ton idée il faut que fasse un wrapper mais du côté C/C++ (ce qui me paraît plus compliqué)

Ah.. Je dois préciser que j'ai codé un générateur d'INCLUDE pour PB.
Je suis pas fou... Il y a trop de fonctions pr faire ça à la main. :)
Il mettra à jour le wrapper pour chaque update de chipmunk.
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

La solution proposée par Cpl.Bator est celle que j'utilise et je peux te dire que c'est la meilleure aussi bien en terme de maintenabilité que d'utilisation et c'est plus dans l'esprit lorsque l'on importe une bibliothèque.
"Qui baise trop bouffe un poil." P. Desproges
eddy
Messages : 67
Inscription : mer. 09/avr./2008 2:08

Message par eddy »

Vous avez des moulinettes pour faire vos wrapper ?
Parce que le problème est que je ne vais me taper toutes les fonctions et structures à la main.
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

J'en avais codé une pour FMOD mais pour les autres, je les ai codé à la main.
"Qui baise trop bouffe un poil." P. Desproges
Anonyme

Message par Anonyme »

Pareil comme les romains :D , après tu passes plus de temps à codé une moulinette que wrappé :D
eddy
Messages : 67
Inscription : mer. 09/avr./2008 2:08

Message par eddy »

c bon de toute façon j'ai fini :)
Anonyme

Message par Anonyme »

Tu t'es embêter a importé les fonctions avec les structures ?

du genre :

Code : Tout sélectionner

FreeTruc ( *Objet.Truc )
Répondre