2012-06-28 5 views
1

Итак, я пытаюсь передать код C# в единстве и объективном коде c в Xcode. Вот мой код:Unity падает при использовании собственного кода

text.h

extern "C" { 
int textTotexture(int hello,int world); 
} 

text.mm

int textTotexture(int hello,int world){ 
NSString *myString =[[NSString alloc] init]; 
NSSize size = [myString sizeWithAttributes:0]; 
NSImage* newImage = [[NSImage alloc] initWithSize: size]; 
[newImage lockFocus]; 

/* if you have a second image you're going to overlay on top of the first, do the same except use NSCompositeSourceOver as the operation */ 
//NSRect myRect = NSMakeRect(0,0,size.width,size.height); 

//[myString drawInRect:myRect withAttributes:0]; 
[newImage unlockFocus]; 
//NSData *imageData = [newImage TIFFRepresentation]; 
//NSBitmapImageRep *imageRep = [NSBitmapImageRep imageRepWithData:imageData]; 
//NSDictionary *imageProps = [NSDictionary dictionaryWithObject:[NSNumber numberWithFloat:1.0] forKey:NSImageCompressionFactor]; 
//imageData = [imageRep representationUsingType:NSPNGFileType properties:imageProps]; 
//int len = [imageData length]; 
//memcpy(data, [imageData bytes], len); 
return hello+world; 
} 

вызова функции:

[DllImport("CubePlugin")] 
public static extern int textTotexture(int s, int w); 
Debug.Log(textTotexture(1,2)); 

Основная связь хорошо, как журнал отладки возвращает 3 но как только я добавляю функциональный код, единство просто падает. Я подозреваю, что какой-то родной код просто не заканчивается.

Я только что узнал, что проблема возникает, когда я добавляю фокус блокировки и теряю фокус обратно. Что мне делать, чтобы избежать этого, но достичь моей цели?

+0

Когда вы говорите «он падает», что на самом деле происходит? EXC_BAD_ACCESS? Исключение Objective-C? – JeremyP

+0

Привет, Джереми, когда я говорю об аварии, я имею в виду, что он просто замерзает, и мне нужно заставить выйти из единства. –

+0

Звучит как тупик. Вы используете этот код в основном потоке? Если нет, у вас большие проблемы, потому что API рисования Cocoa не является потокобезопасным. – JeremyP

ответ

0

его не видно, как ваш регулируете свой класс «текст», но вы можете попробовать это: (пишу без редактора, поэтому могут быть опечатки)

@implementation text 
//.... 
-(int)textToTexture:(int)A andValue:(int)B 
{ 
    int result = 0; 
    // do stuff 
    return result 
} 
@end 

static text* myObject = nil; 

extern "C"{ 
    int textToTexture(int a, int b) 
    { 
    if(myObject == nil) 
     myObject = [[text alloc] init]; 

    return [myObject textToTexture:a andValue:b]; 
    } 
} 

в файле C#

[DllImport ("__Internal")] 
public static extern int textTotexture(int a, int b); 

затем позвоните по телефону

Смежные вопросы