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: [tutorial] Posez vos question sur les DLL C++  (Read 89050 times)

0 Members and 1 Guest are viewing this topic.

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #275 - 01 August 2007, 01:12:19
On continue ici je deleterais...

Dan


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #276 - 01 August 2007, 01:14:11
ouais mais la merde c'est que t'a deux variable qui commande 4 ecran si je comprend bien ?
ca peut pas marcher ca...

Dan


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #277 - 01 August 2007, 01:15:45
ou c'est deux même ecran et bouton sur deux panel différent ?

Dan


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #278 - 01 August 2007, 01:16:45
Bon, par contre, il y a un defaut qui me saute aux yeux, c'est que sur le moment les noms de variables me
paraissaient super explicites et maintenant, j'avoue qu'ils peuvent prêter à confusion ...
Faut pas hésiter à écrire des variables du genre bDisplayAllumeOuEteint


Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #279 - 01 August 2007, 01:17:47
T'as pas reçu la DLL ?
Jettes un oeil tu vas comprendre ...

Bouton gauche eteint ou allume display du haut.
Bouton droite allume ou eteint Display du bas
Bouton milieu ... eteindra Display du milieu .... plus tard :badsmile:





Message modifié ( 01-08-2007 01:20 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #280 - 01 August 2007, 01:53:40
mais le mieux c'est encore ca:

Code: [Select]
case AID_BOUTONFUELDISPLAY:
           if (my>22)
           {
                      bFuelDisplayStatus=TRUE;
           }
           else
           {
                      bFuelDisplayStatus=FALSE;
           }
           // on racfraichi bouton ET ecran
           oapiTriggerPanelRedrawArea (0, AID_TOPFUELDISPLAY);
           oapiTriggerPanelRedrawArea (0, AID_BOUTONTOPFUELDISPLAY);
           return true;

une variable par  intterupteur et quand on le change (variable) on rafraichi iinterupteur+display
La c'est logique comme un couché de soleil



Message modifié ( 03-08-2007 06:42 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #281 - 01 August 2007, 05:40:51
Ca, ça a l'air de fonctionner, mais je ne suis plus sûr de rien. :sick:

Il y a quand même des choses qui m'échappent encore totalement sur
le pourquoi du return true; ou return false; à l'intérieur des fonctions de
mouse ou redraw à la fin d'un CASE, je sais que ça retourne 1 ou 0 pour
la fonction principale, mais l'intérêt :doubt:

Ca n'a rien à voir avec les arguments. Very strange pour moi pour le moment :badsmile:

Code: [Select]
// --------------------------------------------------------------
// Respond to panel mouse event
// --------------------------------------------------------------

case AID_BOUTONTOPDISPLAY :
           if (my>22)
           {
                      bTopDisplayStatus=TRUE;
           }
           else
           {
                      bTopDisplayStatus=FALSE;
           }
           return SwitchTopDisplay();
           return true;


// --------------------------------------------------------------
// Respond to panel redraw event dans Panel.cpp
// --------------------------------------------------------------

case AID_BOUTONTOPDISPLAY :
             if (bTopDisplayStatus == TRUE)
             {
oapiBlt (surf, srf[1], 0, 0, 301, 241, 30, 44); // bouton allume sur le bitmap
             }
             else
             {
oapiBlt (surf, srf[1], 0, 0, 331, 241, 30, 44); // bouton eteint sur le bitmap
             }
             return true;


// La même chose pour le Display concerné

// --------------------------------------------------------------
// Redessine bouton et display en cas de mouse event
// --------------------------------------------------------------

bool Irridium::SwitchTopDisplay ()
    {
oapiTriggerPanelRedrawArea (0, AID_TOPDISPLAY);
oapiTriggerPanelRedrawArea (0, AID_BOUTONTOPDISPLAY);
return true;
}



Message modifié ( 03-08-2007 12:26 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #282 - 01 August 2007, 13:32:38
les returns sont un moyen commode de passer un résultat a l'appellant et/ou de sortir d'une fonction:

Code: [Select]
int CalculDeuxPlusDeux(void)
{
    int EffectueLeBoulot=2+2;
    return EffectueLeBoulot;
}

Resultat=CalculDeuxPlusDeux();    // resultat sera egal a 4 après cett ligne.

Bien comprendre qu'un return fait tout de suite sortir de la fonction et retourne
une valeur a l'appellant:

Code: [Select]
int CalculDeuxPlusDeux(void)
{
    int EffectueLeBoulot=0;
    EffectueLeBoulot=2+2;
    if(EffectueLeBoulot==4)   // oui c'est vrai
    {
        return EffectueLeBoulot;   // sort immediatemment de la fonction et retourne le resultat
    }
   // ci dessous jamais executé on est deja sorti de la fonction avce le return plus haut
    EffectueLeBoulot+=16;
    return EffectueLeBoulot;

}

Resultat=CalculDeuxPlusDeux();    // resultat sera egal a 4 après cette ligne.


Ce qui doit être retourné par une fonction est indiqué dans la déclaration
par exemple celle ci doit retourner un "bool" : bool SwitchTopDisplay()


Celle ci ne devrais rien retourner:
void NeRetourneRien()

Et celle si un entier:

int RetourneEntier()


On peut aussi sortir d'une fonction avec return dans le cas d'une fonction void dans ce cas on ne return pas de resultat

Code: [Select]
void CalculRien(void)
{
    int EffectueLeBoulot=0;
    EffectueLeBoulot=2+2;
    if(EffectueLeBoulot==4)   // oui c'est vrai
    {
        return;   // sort immediatemment de la fonction ne retourne rien
    }
   // ci dessous jamais executé on est deja sorti de la fonction avce le return plus haut
    EffectueLeBoulot+=16;
    return; Inutile ici de toute facon on est a la fin de la fonction

}

// erreur de compile, la fonction ne retourne rien
Resultat=CalculRien();  



Dans le cas des clbk d'Orbiter, martin veux qu'on lui retourne "1" (true) si on a intercepté
et traité la demande et zéro (false) dans le cas contraire.

Exemple typique avec "clbkClavier"

Code: [Select]
in clbkClavier(int Touche)
{

     if(Touche=="P")
     {
          // c'est pour nous la touche P
          TraiteToucheP();
          return 1;   // si c'était la touche P on sort tout de suite de la fonction.
     }
     // cétait un autre touche pas pour nous return 0 a l'appellant (en l'occurence Orbiter)
     return 0;
}

Meme chose pour l'affichage, la fonction sera appellée autant de fois qu'il y a de zone
déclarée, AID_MYSWITCH si tu les traite tu return 1 indiquant a Orbiter que tu les a traitée
sinon par defaut la fonction return 0, Orbiter sais donc que tu n'a rien fais.




pour ton code "SwtichTopDisplay" c'est d'ailleurs totalement intutile de retourner une valeurs "bool"
tu lui demande de faire un boulot pas de te donner un résultat.
C'est pas grave du tout la seul chose c'est que ca n'a pas l'air d'etre clair les returns...

Comme tu n'attend aucun résultat de ta fonction SwitchTopDisplay  tu peut modifier le code comme cela:

Code: [Select]
[glow=yellow,2,300]void[/glow] Irridium::SwitchTopDisplay ()
{
oapiTriggerPanelRedrawArea (0, AID_TOPDISPLAY);
oapiTriggerPanelRedrawArea (0, AID_BOUTONTOPDISPLAY);
[glow=yellow,2,300]// pas besoin de return ici ca ferait meme un erreur de compile de le mettre[/glow]
}

void veut dire "rien"

Et modifier comme cela:

Code: [Select]
          case AID_BOUTONTOPDISPLAY :
           if (my>22)
           {
                      bTopDisplayStatus=TRUE;
           }
           else
           {
                      bTopDisplayStatus=FALSE;
           }
           SwitchTopDisplay();
           return true;

De toute facon ca c'était incohérent, d'abord ta fonction return toujours "true"
et ensuite la ligne d'en dessous ne sera jamais executé vu que tu est deja sorti
de la fonction:

Code: [Select]
          return SwitchTopDisplay();   // sort de la fonction
          return true;   // jamais executée


Chest plus clair ?

Dan



Message modifié ( 01-08-2007 14:16 )


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #283 - 01 August 2007, 13:59:07
En passant le nom "SwitchTopDisplay" est incohérent du coup, tu ne switch plus tu demande seulement
un "rafraichissement"

"RefreshTopDisplay()" serais plus juste du coup. ou "RafraichiTopDisplay()"

En fait c'est pas *trop* grave si tu comprend exactement ton code mais comme tu est confu
c'est le genre de truc qui peut vraiment agraver la confusion... donc un truc
à ne pas prendre a la légère.

Les noms de fonction et de variable c'est juste pour l'humain qui lis, si les noms sont mal choisi
ou incohérent avec ce qui est effectivement fait le code et la logique deviennent illisible et confu.

Dan



Message modifié ( 01-08-2007 14:19 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #284 - 01 August 2007, 14:48:03
Et ben :applause:

Ca c'est un véritable cours !
Mais c'est quand même bien compliqué, le Martin "veut" qu'on lui retourne un 1 ou un 0 j'avais bien vu ... donc return
true ... mais il fallait bien que j'aille vers la fonction "RaffraichiBoutonEtDisplay" Et la je ne lui retourne plus rien ....

Bon maintenant, moi j'avais traduit par "est ce que la zone a été tripotée " oui non ... donc gros doute sur les cases
ou ça return false alors que ça teste un tripotage.

Merci pour ces précisions sur la méthode. Je vais essayer de lire le code comme ça sur des exemples simples.


Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #285 - 01 August 2007, 15:14:15
Quote
picto a écrit:
Bon maintenant, moi j'avais traduit par "est ce que la zone a été tripotée " oui non ... donc gros doute sur
les cases ou ça return false alors que ça teste un tripotage.

Ya des cases qui retourne false dans les clbk panel ? normalement ca devrais pas... !?

Martin veut qu'on lui dise avec le return si on l'a intercepté "c'est ok martin ! AID_TOPDISPLAY c'est a moi je m'en
occupe !" ou pas "AID_BIDULEPASAMOI je connais pas je te return 0 par defaut, debrouille toi tout seul avec"

Martin s'en sert par exemple pour le clavier: si tu l'a intercepté (return 1) il ne passera pas la touche clavier au clbk
des autres vaisseau (c'est pas pour eux si on l'a intercepté dans le notre)

Mais ca c'est une convention des clbk** a martin (voir doc) toi tu fais ce que tu veux avec tes fonctions, la plupart du
temps on a pas besoin de retourner une valeur donc "void" mais on peut utiliser le "return" nu pour sortir
rapidemment d'une fonction aussi car executer le reste est devenu inutile.

Dans clavier si tu a encore 50 if(touche=MACHIN) en dessous de ton if(Touche="P") on pas besoin de les tester si
c'est "P" donc on sort immédiatement de la fonction avec le return, ca sauve 50 lignes de "if" a executer.

Code: [Select]
in clbkClavier(int Touche)
{

     if(Touche=="P")
     {
          // c'est pour nous la touche P
          TraiteToucheP();
          return 1;   // si c'était la touche P on sort tout de suite de la fonction.
     }
    // ce serait idiot de faire ces tests on sait déjà que c'est la touche "P"
     if(Touche=="M")
     {
          TraiteToucheM();
          return 1;   // si c'était la touche M on sort tout de suite de la fonction.
     }
     if(Touche=="Z")
     {
          TraiteToucheZ();
          return 1;   // si c'était la touche Z on sort tout de suite de la fonction.
     }
     return 0;

}



Message modifié ( 01-08-2007 15:49 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #286 - 01 August 2007, 15:27:32
Non, en fait, je viens de comprendre ...
Dans ce cas si tripotage à gauche pouf fonction DecHudMode ....
Et c'est elle qui renvoie true à clbkPanelMouseEvent.


Code: [Select]
case AID_HUDMODE:
if (event & PANEL_MOUSE_LBDOWN)
                 return DecHudMode();
if (event & PANEL_MOUSE_RBDOWN)
                 return IncHudMode();
return false;

bool Irridium::DecHudMode ()
{
int hudmode = oapiGetHUDMode();
if (hudmode) {
oapiSetHUDMode (hudmode-1);
return true;
} else return false;
}



Message modifié ( 03-08-2007 12:25 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #287 - 01 August 2007, 15:42:17
mouais, :doubt: c'est dans le shuttleA ca ?

Le principe c'est quand on decremente si il arrive en dessous de zéro la fonction DecHudMode
retourne "false" pour "j'ai pas pus decrementer le mode on était deja au minimum"

Cette ligne sort donc de clbkPanelMouseEvent et return false a "Martin"
Code: [Select]
if (event & PANEL_MOUSE_LBDOWN) return DecAttMode();

Mais ca clbkPanelMouseEvent s'en fout royalement c'est notre cuisine interne, lui ce qu'il veut qu'on lui dise c'est si on
a intercepté cet event ou pas, ca ne porte pas a consequence mais le code est donc faux.

La doc de clbkPanelMouseEvent :

Quote
Return value:
The function should return true if it processes the event, false otherwise.


Tu peut laisser DecHudMode comme ca ca pourrai t'être utile de savoir si il a pu decrementer ou pas
par exemple pour ne pas jouer un son si il n'a pas pu:

Code: [Select]
if(DecAttMode()==TRUE)
{
   PlayVesselWave("ModeChangeOK");
}

Par contre le code de clbkPanelMouseEvent est faux, comme j'ai dis ca ne porte pas a consequence ca execute juste pleins de ligne inutiles (Martin ne doit pas en faire grand chose si tu l'a pas intercepter, peut etre juste le passer a d'autres ?) mais ca peut rendre les choses confuses...

La ce serait juste:

Code: [Select]
case AID_ATTITUDEMODE:
    if (event & PANEL_MOUSE_LBDOWN)
           DecAttMode();
    if (event & PANEL_MOUSE_RBDOWN)
           IncAttMode();
    return true;   // on la intercepté ce case ? ben oui !

Avec du son: (faudrais que IncAttMode retourne aussi false si il est trop haut)

Code: [Select]
case AID_ATTITUDEMODE:
    if (event & PANEL_MOUSE_LBDOWN)
    {
           if(DecAttMode()==TRUE)
           {
                    PlayVesselWave("ModeChange.wav");
           }
    }
    if (event & PANEL_MOUSE_RBDOWN)
    {
           if(IncAttMode()==TRUE)
           {
                    PlayVesselWave("ModeChange.wav");
           }
    }
    return true;   // on la intercepté ce case ? ben oui !

Dan



Message modifié ( 01-08-2007 15:44 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #288 - 01 August 2007, 15:51:17
Nan ! C'est dans le DeltaGlider et si ça se trouve dans le DGIV aussi ! :badsmile:
Je l'ai repris et dupliqué pour faire le HUD Mode sur le même modèle.
Je relis ton post précédent ... ;)

Code: [Select]
case AID_ATTITUDEMODE:
if (event & PANEL_MOUSE_LBDOWN) return DecAttMode();
if (event & PANEL_MOUSE_RBDOWN) return IncAttMode();
return false;

bool DeltaGlider::DecAttMode ()
{
int mode = GetAttitudeMode();
if (mode) {
SetAttitudeMode (mode-1);
return true;
} else return false;
}



Message modifié ( 03-08-2007 12:26 )

Pic

Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #289 - 01 August 2007, 21:12:15
Faut quand même avouer qu'il y a de quoi en perdre son latin :doubt:

Deux exemples pour le même truc sauf que le deltaglider fait d'une pierre deux coups
à cause des retros que le Shuttle n'a pas ( si ce n'est par les PODs mais c'est une autre histoire :) )
L'autre code c'est ShuttleA MK2 ... pas ShuttleA normal.

J'ai l'impression que ça explique la disparition des sliders au moment du changement de vue.
Dans le premier cas, la surf est construite mais pour qui ? Pas évident.
Et ce qui m'étonne, c'est que dans les deux cas les surfs ne sont pas construites dans redraw event.

J'ai essayé les deux et ni l'un ni l'autre ne fonctionnent de toutes façons :doubt:
Ces :fu: surfs disparaissent aux changements de focus !


Code: [Select]
bool ShuttleA::RedrawPanel_Throttle (SURFHANDLE surf)
{
UINT i, pos;
bool redraw = false;

for (i = 0; i < 2; i++) {
double level = GetThrusterLevel (th_main[i]);
pos = (UINT)((1.0-level)*180.0);
if (pos != sliderpos_main[i])
sliderpos_main[i] = pos, redraw = true;
}
if (redraw){
"for (i = 0; i < 2; i++)"
"oapiBlt (surf, srf[0], i*30, sliderpos_main[i], 0, 0, 23, 19);"
}
return redraw;
}
}
[/b]

Code: [Select]
bool DeltaGlider::RedrawPanel_Throttle (SURFHANDLE surf)
{
UINT i, pos;
bool redraw = false;

for (i = 0; i < 2; i++) {
double level = GetThrusterLevel (th_main[i]);
if (level > 0) pos = (UINT)((1.0-level)*108.0);
else {
level = GetThrusterLevel (th_retro[i]);
if (level > 0) pos = 125+(UINT)(level*32.0);
else           pos = 116;
}
if (pos != engsliderpos[i])
engsliderpos[i] = pos, redraw = true;
}
if (redraw) {
"oapiBltPanelAreaBackground (AID_ENGINEMAIN, surf);"
"for (i = 0; i < 2; i++)"
"oapiBlt (surf, srf[4], i*26, engsliderpos[i], 0, 0, 23, 18 );"
}
return redraw;
}
[/b]



Message modifié ( 03-08-2007 12:43 )

Pic

Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #290 - 03 August 2007, 06:48:06
Test j'ai rajouté un tag pour la colorisation du code, au lieu de [ code] vous mettez [ cpp] et s'est en couleurs:


Code: [Select]
/////////////////////////////////////////////////////////////////////////////////
// RedrawPanel_Throttle
/////////////////////////////////////////////////////////////////////////////////
bool DeltaGlider::RedrawPanel_Throttle (SURFHANDLE surf)
{
UINT i, pos;
bool redraw = false;

for (i = 0; i < 2; i++) {
double level = GetThrusterLevel (th_main[i]);
if (level > 0) pos = (UINT)((1.0-level)*108.0);
else {
level = GetThrusterLevel (th_retro[i]);
if (level > 0) pos = 125+(UINT)(level*32.0);
else           pos = 116;
}
if (pos != engsliderpos[i])
engsliderpos[i] = pos, redraw = true;
}
if (redraw) {
oapiBltPanelAreaBackground (AID_ENGINEMAIN, surf);
for (i = 0; i < 2; i++)
oapiBlt (surf, srf[4], i*26, engsliderpos[i], 0, 0, 23, 18 );
}
return redraw;
}



Message modifié ( 03-08-2007 06:49 )


Offline picto

  • Legend
  • ******
  • Posts: 5014
  • Country: France fr
  • Karma: 24
  • Criiii Crii Crii
Reply #291 - 03 August 2007, 12:24:12
Chouette ! En mettent en gras en plus ça deviens lisible en un clin d'oeil !
Mais ! :rant: Ca compile pas quand je fais F7 sur le forum :wall:



Message modifié ( 03-08-2007 12:36 )

Pic

Offline Schimz

  • Legend
  • ******
  • Posts: 1598
  • Karma: 1
Reply #292 - 19 August 2007, 10:14:07
Je suis en train de convertir le DGex sur VC++2008.
J'ai un problème avec les TextOut :

J'ai droit à ça (pour tout les TextOut et CreateFont)
Code: [Select]
1>        La conversion d'un type intégral en type pointeur nécessite reinterpret_cast, un cast de style C ou un cast de
style fonction
1>.\DeltaGliderEX.cpp(1340) : error C2664: 'TextOutW' : impossible de convertir le paramètre 4 de 'const char [2]' en
'LPCWSTR'

J'ai bien trouvé un début d'explication, mais ça m'embrouille juste un peu plus :/
http://www.developpez.net/forums/archive/index.php/t-32467.html



Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #293 - 19 August 2007, 13:51:39
Regarde si les settings sont pas en unicode peut etre ?

Dan


Offline Schimz

  • Legend
  • ******
  • Posts: 1598
  • Karma: 1
Reply #294 - 19 August 2007, 16:18:16
C'est réglé sur Unicode. J'ai essayé des DrawText à la place des TextOut, c'est pareil.

Edit : J'ai fait nouveau projet/bibliothèque de classe et j'ai importé mes sources et ressources.



Message modifié ( 19-08-2007 16:52 )


Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #295 - 19 August 2007, 18:06:30
Quote
Schimz wrote:
C'est réglé sur Unicode. J'ai essayé des DrawText à la place des TextOut, c'est pareil.
Edit : J'ai fait nouveau projet/bibliothèque de classe et j'ai importé mes sources et ressources.

Justement enleve le unicode... a moins que tes textes soient en japonais c'est pas utile
et tu tape dans des prototype de fonctions qui n'ont pas les même requis que celle
de ton projet.

ie: Textout en unicode tape dans TextoutW (wide) au lieu de TextOutA

WinGDI.h:
Code: [Select]
#ifdef UNICODE
#define TextOut  TextOutW
#else
#define TextOut  TextOutA
#endif // !UNICODE

Dan



Post Edited ( 08-19-07 18:08 )


Offline Schimz

  • Legend
  • ******
  • Posts: 1598
  • Karma: 1
Reply #296 - 19 August 2007, 19:44:05
Ok, c'est résolu.

Mais ça marche pas, j'ai un truc bizarre :

1>e:\orbiter.dev\DeltaGliderEX\c++\samples\DGex\DeltaGliderEX\DeltaGliderEX\DeltaGliderEX.cpp : warning C4747: Appel de
'_DllMain@12' managé : impossible d'exécuter du code managé lors du verrouillage du chargeur, y compris le point d'entrée de
DLL et les appels accessibles à partir du point d'entrée de DLL


S'en suit 29 erreurs de ce genre :

1>DeltaGliderEX.obj : error LNK2028: jeton non résolu (0A0003F6) "extern "C" int __stdcall DeleteObject(void *)"
(?DeleteObject@@$$J14YGHPAX@Z) référencé dans la fonction "int __stdcall DllMain(struct HINSTANCE__ *,unsigned long,void *)"
(?DllMain@@$$HYGHPAUHINSTANCE__@@KPAX@Z)




Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #297 - 19 August 2007, 20:20:00
T'a bien les dernieres libs platform SDK dans le path MSVC ? (platform SDK server 2003 R1 ou R2)
Regarde peut etre la pour une indication sur la platform SDK et les réglages:
http://orbiter.dansteph.com/forum/index.php?topic=6334.msg95341#msg95341


Dan



Message modifié ( 19-08-2007 20:20 )


Offline Schimz

  • Legend
  • ******
  • Posts: 1598
  • Karma: 1
Reply #298 - 19 August 2007, 21:14:51
Ben... ça marche. J'ai suivi ce tuto et je compile sans problème avec ton starter kit.



Offline DanSteph

  • Administrator
  • Legend
  • *****
  • Posts: 15407
  • Karma: 256
  • Hein, quoi !?
    • FsPassengers
Reply #299 - 19 August 2007, 21:35:14
Tu veux dire qu'avec express mon exemple compile et pas ton projet ou que ton projet compile
avec express et pas avec MSVC++ 2005 (2008 est pas encore sorti si ?) ou que tout marche
finalement?

Dan



Post Edited ( 08-19-07 21:35 )