See site in english Voir le site en francais
Website skin:
home  download  forum  link  contact

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

Author Topic: [Projet/programmation] Vive les DLL  (Read 4482 times)

0 Members and 1 Guest are viewing this topic.

Offline Centaur

  • Sr. Member
  • ****
  • Posts: 252
  • Karma: 0
29 April 2012, 15:50:13
Bon je me met au DLL et grace a la structure de donnée des *.ini du spacecraft3 de vinka ainsi qu'au tuto de dan ca avance pas trop mal... Quoique je pourrais en vouloir a dan, resté 4h bloqué car je voulais absolument définir mon modèle physique dans le *.cpp modeleVol (la ou est défini l’obsolète )alors que il fallait la mettre dans le cblkSetClassCaps.cpp.....
Alors qu'il suffisait de:

:boulet:  :boulet:  :boulet:

RTFM

:stupid:  :stupid:  :stupid:  :stupid:  :stupid:

Il n'empeche que j'ai un petit souci pour la definition dudit modele:

juste après mes includes j'ai recopié ceci:

Code: [Select]
void HLiftCoeff (VESSEL *v, double beta, double M, double Re, void *context, double *cl, double *cm, double *cd)
et j'utilise la fonction CreateAirFoil elle aussi recopiée mais dans le cblkSetClassCaps

Code: [Select]
CreateAirfoil ( LIFT_VERTICAL , _V(0,0,0.5),VLiftCoeff, 5.5, 200, 3);
et j'obtiens...

Code: [Select]
cblkSetClassCaps.cpp(252) : error C2664: 'VESSEL::CreateAirfoil' : cannot convert parameter 3 from 'void
(__cdecl *)(VESSEL *,double,double,double,void *,double *,double *,double *)' to 'AirfoilCoeffFunc'
1>        None of the functions with this name in scope match the target type

J'ai du oublier un truc quelque part... si une bonne âme a une idée

ne vous inquietez pas pour la suite j'ai aussi un probleme de librairie a regler...

Code: [Select]
1>Édition des liens en cours...
1>clbkConsumeBufferedKey.obj : error LNK2005: "unsigned int anim_gear" (?anim_gear@@3IA) already defined in cblkSetClassCaps.obj

salute



Message modifié ( 29-04-2012 15:50 )



Message modifié ( 02-05-2012 08:00 )

Centaur

Offline florentin

  • Full Member
  • ***
  • Posts: 93
  • Karma: 2
Reply #1 - 29 April 2012, 20:34:17
je ne me souviens plus exactement quelle est la syntaxe exacte pour cette fonction, mais cela vient du parametre 3 de cette fonction :
Code: [Select]
CreateAirfoil ( LIFT_VERTICAL , _V(0,0,0.5),VLiftCoeff, 5.5, 200, 3);
je te conseil vivement d'aller voir les exemples fournis avec orbiter 2010 (dossier SDK\samples). Tu peut regarder avec le shuttlePB, mais celui-ci est trop simple a mon goût ... sinon il y a le DG, mais la l'outil search est indispensable (il y a facilement 4000 lignes de code).

pour ta deuxième erreur, je dirais (sans certitude) que tu a definit "anim_gear" dans un header et que tu as inclut celui-ci deux fois, sans mettre les precaution anti-inclusion-infini.

bonne programmation....



Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #2 - 29 April 2012, 22:59:01
Appelle CreateAirfoil3 au lieu de CreateAirfoil. L'erreur indique que la signature de la fonction passée ne correspond pas à celle attendue.

Si tu as besoin d'aide pour calculer les différentes variables à définir, je suis déjà passé par là, et j'ai recueilli pas mal d'infos. Je pourrais partager mes connaissances si je trouve le temps, les ressources sur le web étant très pauvre.

Tu peux t'aider avec les articles anglophones de Wikipédia. Les principaux articles sont :
Pour le Moment coefficient (CM) : http://en.wikipedia.org/wiki/Pitching_moment
Pour le Drag coefficient (CD) : http://en.wikipedia.org/wiki/Drag_coefficient
Pour le Lift coefficient (CL) : http://en.wikipedia.org/wiki/Lift_coefficient

Un article général :
http://en.wikipedia.org/wiki/Flight_dynamics_(fixed_wing_aircraft)

Si tu veux créer quelque chose d'encore plus avancé, tu peux te servir du nombre de Reynolds (variable Re). Personnellement, je n'ai pas vraiment investigé de ce côté, trouvant cette notion trop complexe.
http://en.wikipedia.org/wiki/Reynolds_number



Message modifié ( 29-04-2012 23:23 )

Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon

Offline Centaur

  • Sr. Member
  • ****
  • Posts: 252
  • Karma: 0
Reply #3 - 30 April 2012, 10:29:13
Ca marche bein merci



Message modifié ( 30-04-2012 12:33 )

Centaur

Offline Centaur

  • Sr. Member
  • ****
  • Posts: 252
  • Karma: 0
Reply #4 - 01 May 2012, 09:14:58
Bon mon premier addon est desormais UCGO/UNMU compatible, merci dan, ca fait bizarre quand même...

On écrit (copie/colle/modifie/debug) un bout de code et ca rend la même chose que les premier vaisseaux que j'ai piloté dans orbiter.... (enfin ce n'est pas un DGIV ou un XR3 quand même)

Bon coddons la suite...



Message modifié ( 01-05-2012 09:32 )

Centaur

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #5 - 01 May 2012, 11:49:37
Quote
Centaur a écrit:
Bon coddons la suite...

Bienvenu dans "l'enfer" de la création :badsmile:

C'est le pied quand même, hein hein ?

Dan


Offline Centaur

  • Sr. Member
  • ****
  • Posts: 252
  • Karma: 0
Reply #6 - 01 May 2012, 12:25:39
Je dois avouer que c'est un sacré pied... me voila partis dans un panel 2D... pendant que j'y suis.... Je dois avouer que la j'ai fais fort... étant donné que j'ai un peu de temps... j'ai passé 4j non stop ou presque a créer l'add on (ca me rappelle ce doux moment qu'était la prepa). A part le fait que je sois une quiche finie en texturage, ca avance bien.

J'ai juste une bizarerie avec VS 2005, en rentrant les mêmes réglages dans le release et le debug, erreur de LNK dans l'un et pas dans l'autre, vous avez dis bizarre?


Centaur

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #7 - 01 May 2012, 13:16:26
Quote
Centaur a écrit:
J'ai juste une bizarerie avec VS 2005, en rentrant les mêmes réglages dans le release et le debug, erreur de LNK dans l'un et pas dans l'autre, vous avez dis bizarre?

Check les libraries dans les configuration de projet, debug et release on des configurations différentes.

A++

Dan


Offline Centaur

  • Sr. Member
  • ****
  • Posts: 252
  • Karma: 0
Reply #8 - 01 May 2012, 16:24:46
Je vais rechecker... par contre en me mettant au panel 2D j'ai une belle erreur au chargement d'orbiter...

Runtime Error!

Program orbiter.exe

R6033
-attempt to use MSIL code from thise assembly during naive code initialization
This indicate a bug in your application. it is most likely the result of callinf an MSIL-compiled(/clr) function from a native constructor or from DllMain

Je suis dessus depuis 3h donc si quelqu'un a un indice... je prends

Merci

EDIT: encore du temps perdu pour rien, il fallait juste désactiver le /CLR



Message modifié ( 01-05-2012 16:51 )

Centaur

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #9 - 03 May 2012, 14:26:59
Par contre pour les panels évite le GDI ce n'est plus trop compatible avec Orbiter2010.
Utilise sketchpad:


Code: [Select]
oapi::Sketchpad *skp = oapiGetSketchpad(DispSurf);
skp->SetTextAlign (oapi::Sketchpad::CENTER, oapi::Sketchpad::BASELINE);
skp->SetTextColor (RGB(200,200,250));
skp->SetPen(g_Param.hPen[2]);
skp->SetTextColor( RGB(200, 200, 250));
skp->SetBackgroundMode(oapi::Sketchpad::BK_TRANSPARENT);

skp->Text(60,20, "Sketchpad Test", 14);
skp->Rectangle(10,10,60,60);

oapiReleaseSketchpad(skp);

Dan


Offline Centaur

  • Sr. Member
  • ****
  • Posts: 252
  • Karma: 0
Reply #10 - 04 May 2012, 03:53:03
Ok merci je prends note... passage VESSEL3 et..... debuggage de ce bazar... tu me conseille d'utiliser aussi loadpanel2D?
Deuxieme question, par quel appel reduit on la taille de la police?

merci



Message modifié ( 04-05-2012 09:00 )

Centaur

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #11 - 04 May 2012, 11:08:31
J'ai pas testé les nouvelles fonctions de panel "3d" donc je ne peux rien dire mais comme c'est l'avenir ça doit être mieux ou au moins plus compatible ?

Pour les fonts il faut que tu les créés avec un handle global comme hModule donc la déclaration du handle font:

typedef struct {
   HINSTANCE hDLL;
   oapi::Font *hSkpFont;
} GDIParams;

(J'ai gardé le nom "GDIParams" Tu trouveras comment utiliser cette structure dans le code du deltgaglider, évidemment sans rien recopier de GDI, pen brush, font, tout doit être sketchpad)


Donc comme suit:

Code: [Select]
DLLCLBK void InitModule (HINSTANCE hModule)
{
g_Param.hDLL = hModule;
g_Param.hSkpFont= oapiCreateFont( 12, false, "fixed", FONT_NORMAL);

Pas oublier évidemment à la fin:

Code: [Select]
DLLCLBK void ExitModule (HINSTANCE hModule)
{
oapiReleaseFont (g_Param.hSkpFont);

Et dans le code:

Code: [Select]
       char cBuf[256]={0}

oapi::Sketchpad *skp = oapiGetSketchpad(surf);
skp->SetTextColor(RGB(0, 196,0));
skp->SetBackgroundColor(RGB(0, 196,0));
skp->SetBackgroundMode(oapi::Sketchpad::BK_TRANSPARENT);
skp->SetTextAlign (oapi::Sketchpad::CENTER);
        strcpy(cBuf,"Hello");
skp->Text(10,20,cBuf,strlen(cBuf));
oapiReleaseSketchpad(skp);

A noter que la fonction create font est un peu buggée, donc pas d'antialiasing ni de contrôle fin comme avec la GDI et pas vraiment le choix dans la font.

Voila pourquoi: fonction interne d'Orbiter:

Code: [Select]
GDIFont::GDIFont (int height, bool prop, const char *face, Style style, int orientation): oapi::Font (height, prop, face, style, orientation)
{
char *def_fixedface = "Courier New";
char *def_sansface = "Arial";
char *def_serifface = "Times New Roman";

if (!_stricmp (face, "fixed")) {
face = def_fixedface;
} else if (!_stricmp (face, "sans")) {
face = def_sansface;
} else if (!_stricmp (face, "serif")) {
face = def_serifface;
} else if (_stricmp (face, def_fixedface) &&
  _stricmp (face, def_sansface) &&
  _stricmp (face, def_serifface)) {
face = (prop ? def_sansface : def_fixedface);
}
int weight = (style & BOLD ? FW_BOLD : FW_NORMAL);
DWORD italic = (style & ITALIC ? TRUE : FALSE);
DWORD underline = (style & UNDERLINE ? TRUE : FALSE);
hFont = CreateFont (height, 0, orientation, orientation, weight, italic, underline, 0, 0, 3, 2, 1, 49, face);
}

Avec ça t'as quasiment toutes les fonctions désirées.

A++

Dan



Message modifié ( 04-05-2012 11:09 )


Offline Centaur

  • Sr. Member
  • ****
  • Posts: 252
  • Karma: 0
Reply #12 - 05 May 2012, 08:46:21
Je suis plongé dans l'API reference de Martin, il ne fait pas mention d'obsolescence de la fonction clbkLoadPanel par rapport à clbxLoadPanel2D. Cependant, on note au niveau de la philosophie que la dernière fonction (2D) est plus orientée "gérée par un moteur graphique" que par le "noyau". Les conceptions des Panels semblent vraiment différentes au premier coup d'oeil (e.g. plus de bitmap mais des textures, creation d'un mesh2D et implantation du panel dessus).

Et je me permettrais d'ajouter (dis moi si je me trompe)



     
Code: [Select]
  char cBuf[256]={0}

oapi::Sketchpad *skp = oapiGetSketchpad(surf);
skp->SetTextColor(RGB(0, 196,0));
skp->SetBackgroundColor(RGB(0, 196,0));
skp->SetBackgroundMode(oapi::Sketchpad::BK_TRANSPARENT);
skp->SetTextAlign (oapi::Sketchpad::CENTER);
       [i] skp->SetFont (g_param.hSkpFont);[/i]
        strcpy(cBuf,"Hello");
skp->Text(10,20,cBuf,strlen(cBuf));
oapiReleaseSketchpad(skp);

Ca a mieux marché pour moi

Salute et merci encore



Message modifié ( 05-05-2012 08:48 )

Centaur

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #13 - 05 May 2012, 14:06:28
Quote
Centaur a écrit:
  skp->SetFont (g_param.hSkpFont);

Effectivement.

Malheureusement sur les nouvelles fonctions panel je n'ai absolument aucun avis.
Faut que ça reste pratique à coder et pleinement fonctionnel. Le DeltaGlider
utilise un mix des deux ce n'est pas très bon signe mais c'est peut-être aussi
pour ne pas tout refaire ?

Enfin bref, zone d'ombre... Bonne chance ! ;)

A++

Dan



Message modifié ( 05-05-2012 19:50 )


Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #14 - 06 May 2012, 22:40:16
Quote
Centaur a écrit:
Je suis plongé dans l'API reference de Martin, il ne fait pas mention d'obsolescence de la fonction clbkLoadPanel par rapport à clbxLoadPanel2D.

Et pourtant, on peut lire en note de clbkLoadPanel2D ceci :
Quote
This method replaces VESSEL2::clbkLoadPanel. It defines the panels via SURFHANDLES instead of bitmaps

La deuxième méthode permet des animations très smooth, une compatibilité accrue avec les différents clients graphiques et est généralement beaucoup plus rapide, car elle maximise l'utilisation du GPU, libérant le CPU.

Pour plus d'info, le tutoriel de Martin est un must : http://www.orbiter-forum.com/blog.php?b=574


Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon

Offline Centaur

  • Sr. Member
  • ****
  • Posts: 252
  • Karma: 0
Reply #15 - 08 May 2012, 02:50:00
Merci beaucoup, le seul problème avec ce tuto c'est je crois qu'il manque un bout. Cependant, la philosophie de programmation change beaucoup avec cette nouvelle méthode. Du coup j'hésite un peu a passer sur l'autre méthode alors que mon panel est a moitié fait. Surtout que le mot texture me fait peur (missa grosse quiche en texture).

Merci

Salute


« Last Edit: 08 May 2012, 02:50:00 by Centaur »
Centaur