C-Klasse in meinem Objective C Projekt

  • C-Klasse in meinem Objective C Projekt

    Hi,

    ich entwickle eigentlich in Objective C mittels Xcode 4 für den Mac bzw das iPhone,
    nun muss ich aber eine C-Klasse in mein Projekt einbinden.

    die klasse wird mit einem parameter gestartet und spukt dann 2 Dateien aus...(am mac manuel per terminal probiert, soweit schaff ichs grad noch^^)

    wie kann ich sie jetzt aber in mein bestehendes Projekt einbinden?

    ich hoffe das ist das richtige forum hier wenn nicht bitte verschieben...

    bin für jeden Tipp dankbar

    ich zähle auf euch!

    greetings faulk

    lade die klasse(ich hoffe es is eine^^) auch bei bedarf hoch...
  • ich habe auch die source,
    sieht so aus...

    PHP-Quellcode

    1. int main(int argc, char** argv) { char c; int views = 0; // number of views (JPG components) long length; // total length of file size_t amount; // amount read char* buffer; char* fnm; char* fnmbase; if (argc != 2) { fprintf(stdout, "Usage: %s [filename]\n", argv[0]); return 0; } else { fnm = argv[1]; fnmbase = strdup(argv[1]); char* ext = strstr(fnmbase,".mpo"); if (ext != NULL) { ext[0] = '\0'; } }
    2. FILE* f = fopen(fnm,"rb"); if (f==NULL) { fprintf(stderr,"error opening file \"%s\"\n",fnm); return 1; } // obtain file size: fseek(f, 0, SEEK_END); length = ftell(f); rewind(f);
    3. // allocate memory to contain the whole file: //char buffer[BUFSIZ]; buffer = (char*) malloc (sizeof(char)*length); if (buffer == NULL) { fprintf(stderr,"failed to allocate memory\n"); return 2; } else { fprintf(stdout,"Allocated %ld chars of memory.\n",length); } amount = fread(buffer,1,length,f); if (amount != length) { fprintf(stderr,"error loading file\n"); return 3; } fclose(f); // NOW find the individual JPGs... char* view = buffer; char* last = NULL; char* wnm = (char*) malloc(256); //fprintf(stdout,"Started at %p.\n",view); while (view < buffer+length-4) { if (((char) view[0] % 255) == (char) 0xff) { if (((char) view[1] % 255) == (char) 0xd8) { if (((char) view[2] % 255) == (char) 0xff) { if (((char) view[3] % 255) == (char) 0xe1) { fprintf(stdout, "View found at offset %d\n", view-buffer); views++; if (last != NULL) { // copy out the previous view sprintf(wnm, "%s.v%d.jpg", fnmbase, views-1); FILE* w = fopen(wnm, "wb"); fwrite(last, 1, view-last, w); fclose(w); fprintf(stdout, "Created %s\n",wnm); } last = view; view+=4; } else { view+=2; } } else { view+=3; } } else { view+=2; } } else { view+=1; } } //fprintf(stdout,"Stopped at %p.\n",view); if (views > 1) { // copy out the last view sprintf(wnm, "%s.v%d.jpg", fnmbase, views); FILE* w = fopen(wnm, "wb"); fwrite(last, 1, buffer+length-last, w); fclose(w); fprintf(stdout, "Created %s\n",wnm); } else if (views == 0) { fprintf(stdout, "No views found.\n"); } free(wnm); free(buffer); return 0;}


    edit: die zeilenumbrüche sind verlorengegangen... sorry deswegen, ich hab die datei angehängt

    und ich will dann im endeffekt die bilder die hier erstellt werden in meinem programm abfangen

    es würde mir meinen allerwertesten retten wenn ich das hinbekomme

    es muss ja nicht mal elegant sein, nur funktionieren

    leider hab ich keine ahnung wie..

    greetings faulk
  • hey, danke für die antworten

    ich habs jetzt schon mal soweit das ich es im controller aufrufen kann und es läuft...

    nur noch ein problem wie kann ich den rückgabeparameter auf einen array ändern der die 2 variablen vom typ "FILE" enthält?

    oben habe ich einen FILE array erstellt
    --> FILE* images[2];
    passt so?


    unten dann so reingeschrieben:
    ...
    sprintf(wnm, "%s.v%d.jpg", fnmbase, views-1);

    FILE* w = fopen(wnm, "wb");



    fwrite(last, 1, view-last, w);

    fclose(w);

    images[views-1] = w; //so okay??

    ...

    soweit so schlecht^^
    jetzt schaff ich es nicht den übergabeparameter so zu wählen das ich nachher ein nsimage draus machen kann, meinetwegen mittel NSData dazwischen?

    weis da einer von euch hilfe?

    bis jetzt war mein versuch sowas in dieser richtung:

    NSArray * temp = [NSArray initWithObjects:images[0],images[1], nil]; // das klappt nicht aber wie soll ich sonst das ganze in ein Obj. C format kriegen?

    free(wnm); //leider keinen plan was da released wird(nicht mal ob das ein release is, aber ich nehme schon an)

    free(buffer);



    return temp;


    greetings faulk
  • naja eigentlich will ich am ende dann ein NSImage haben, wie stell ich das denn besser an?
    ich will nichts local zwischenspeichern...

    hier der code wie er das file schreibt:

    FILE* w = fopen(wnm, "wb");

    fwrite(last, 1, buffer+length-last, w);

    fclose(w);



    kann ich das direkt in ein NSData schreiben lassen ?


    wie gesagt ich will am ende ein NSImage, wie auch immer der weg dorthin ist^^


    ich dachte ich kann aus der FILE klasse dann irgendwie NSData zaubern -.-


    ich kenn mich nicht mit C aus --> garnicht wie man sieht


    vorschläge?


    greetings faulk
  • ich habs jetzt ohne zwischenspeicher versucht und zwar so wie du es vorgeschlagen hast:

    -->
    ...
    //FILE* w = fopen(wnm, "wb");

    //fwrite(last, 1, view-last, w);

    //fclose(w);

    //dataWithBytes:last length:buffer+length-last

    [dataArray addObject:[NSData dataWithBytes:last length:view-last]];

    ...

    dann den array als rückgabewert angegeben

    so außerhalb sieht das ganze dann so aus:

    NSString * picpath = @"/Users/faulk/Desktop/Bild.mpo";

    NSMutableArray * pictures = [NSMutableArray arrayWithArray:[[self split:picpath] mutableCopy]]; //split is die C-Funktion

    NSLog(@"Found %i parts",(int)[pictures count]); // Jetzt erst mal gehe ich von immer 2 aus, deshalb die folgenden 2 zeilen

    NSImage *one = [[NSImage alloc] initWithData:[pictures objectAtIndex:0]];

    NSImage *two = [[NSImage alloc] initWithData:[pictures objectAtIndex:1]];

    [view1 setImage:one];

    [view1 setImageScaling:NSScaleToFit];


    was ich erhalte ist allerdings gar nichts im view(ImageWell) wird nichts angezeigt...


    Ich häng das projekt an wer es mal anschauen will..




    greetings faulk