pb de compilation sur Carbon en obj -C

  • Créateur du sujet Membre supprimé 2
  • Date de début
M

Membre supprimé 2

Invité
j'ai pris le converter.pdf c'est le tutorial de interface builder dans un projet sur projectbuilder donc je suis gentiment l'exemple tiré du Kernigham et richie ( le langage C) qui est le convertisseur de degre Celsius en Fahrenheit (rien de baleze )
donc en suivant ce qui est a coder dans le source du fichier principal dans le projectbuilder je me dis que la compilation devrais se passer sans probleme or j'ai une bonne trentaine d'erreur ( pas genial le truc ) je trouve leur pdf bien gentil mais retaper le code c'est soulant car avec un pdf ya pas de copier coller enfin bref si quelqun peut me dire si il a fait leur exemple et me dire ce qui cloche dans mon code car l'interface a ete bien faites
voici e le code :
/*les rajouts sont ce qui n'est pas dans le source
quand on lance un nouveau projet*/
#include <Carbon/Carbon.h>

//rajout1
/*macro */
#define kConvertCommand 'conv'
#define kConvertSignature 'conv'
#define kFahrenheitFieldID 'conv'
#define kCelsiusFieldID 'conv'

/*prototype*/
pascal OSStatus MainWindowCommandHandler (
EventHandlerCallRef handlerref ,
EventRef event ,
void *userData );

pascal void ConvertCommandHandler ();

//fin rajout1


int main(int argc, char* argv[])

{

IBNibRef nibRef;

WindowRef window;



OSStatus err;

//rajout2
EventTypeSpeccommSpec = { kEventClassCommand , kEventProcessCommand } ;
//fin rajout2

// Create a Nib reference passing the name of the nib file (without the .nib extension)

// CreateNibReference only searches into the application bundle.

err = CreateNibReference(CFSTR("main"), &nibRef);

require_noerr( err, CantGetNibRef );



// Once the nib reference is created, set the menu bar. "MainMenu" is the name of the menu bar

// object. This name is set in InterfaceBuilder when the nib is created.

err = SetMenuBarFromNib(nibRef, CFSTR("MainMenu"));

require_noerr( err, CantSetMenuBar );



// Then create a window. "MainWindow" is the name of the window object. This name is set in

// InterfaceBuilder when the nib is created.

err = CreateWindowFromNib(nibRef, CFSTR("MainWindow"), &window);

require_noerr( err, CantCreateWindow );

// We don't need the nib reference anymore.

DisposeNibReference(nibRef);



// The window was created hidden so show it.

ShowWindow( window ) ;


//rajout3
InstallWindowEventHandler (
window ,
NewEventHandlerUPP(MainWindowCommandHandler) ,
1 ,
& CommSpec ,
(void*)window ,
NULL ) ;
//fin rajout3


// Call the event loop

RunApplicationEventLoop();

CantCreateWindow:

CantSetMenuBar:

CantGetNibRef:

return err;

}

//rajout4
/*fonction*/
pascal OSStatus MainWindowCommandHandler (
EventHandlerCallRef handlerref ,
EventRef event ,
void *userData )
{
OSStatus err = eventNoHandlederr ;
HICommand command;

GetEventParameter (
event ,
kEventParamDirectObject ,
typeHICommand ,
NULL ,
sizeof ( HICommand ) ,
NULL ,
& command ) ;

switch ( command.commandID )
{
case kConvertCommand :
ConvertCommandHandler ( (WindowRef ) userData ) ;
err = noErr ;
break ;
}

return err ;
}


pascal void ConvertCommandHandler ( WindowRef window)
{
ControlHandle fahrenheitField , celsiusFiled ;
ControlID fahrenheitControlID = { kConvertSignature , kFahrenheitFiledID } ;
ControlID celsiusControlID = { kConvertSignature , kCelsiusFiledID } ;
CFString text ;
Size actualSize ;
double fahrenheitTemp , celsiusTemp ;
GetControlByID ( window , & fahrenheitControlID , & fahrenheitField ) ;
GetControlByID ( window , & celsiusControlID , & celsiusField ) ;

GetControlData ( fahrenheitField , 0 , kControlEditTextCFStringTag , sizeof ( CFStringRef ) , &Text ) ;

fahrenheitTemp = ( fahrenheitTemp - 32.0 ) * 5.0 / 9.0 ;

text = CFStringCreateWithFormat ( NULL , NULL , CFSTR ( "%g") , celsiusTemp ) ;

SetControlData (celsiusField , 0 , kControlEditTextCFStringTag , sizeof ( CFStringRef ) , & text ) ;

CFRelease (text) ;

DrawOneControl ( celsiusField ) ;
}
//rajout4

je suis a l'ecoute n'hesitez pas j'aurais pu mail directement manu ou steg mais je pense que mon sujet est interressant
A+
 
Ce que tu as là c'est un programme en carbon et non en objective-C.
Désolé mais j'aime pas trop carbon. Je préfère cocoa objective-C.
Tu as d'ailleurs une version de ce programme en cocoa objective-C et qui est plus compréhensible à mon avis.

A+
 
c'est vrai c'est pas de l'obj C mais plus du C/C++ avec des apelles de fct implementer dans le fichier carbon.h
mais pour moi qui fait plus de C c'est pas evident de ce mettre a l'obj C (c'est un langage objet mais la syntaxe donne un effort a faire du fait de sa nouveauté dans la syntaxe meme si c'est ce ke l'on trouve a la fin du K&R donc c'est pas nouveau neanmoins pas commun)
enfin je remarque que il y a plus de composent en interface visuel sur cocoa que sur carbon mais bon tous ca repond pas a mon probleme de code , alors tu m'invite a faire de l'objC et pas touche a carbon ?????????
A+
 
Franchement si tu veux te lancer dans la bonne programmation sur OS X, je te conseille cocoa objective-C. Pour moi c'est du C à la sauce objet et très facile à comprendre. J'ai quelques potes qui s'y sont mis pour voir et qui aujourd'hui ne jurent que par ce langage. C'est puissant, élégant et facile à comprendre. Demande donc à PowerMike ou Steg ce qu'ils en pensent....

A+