2016-05-05 55 views

回答

2
extern "C" 
{ 
    int _pow2(int x) 
    { 
     // Just a simple example of returning an int value 
     return x * x; 
    } 

    // Returns a char* (a string to Unity) 
    char* _helloWorldString() 
    { 
     // We can use NSString and go to the c string that Unity wants 
     NSString *helloString = @"Hello World"; 
     // UTF8String method gets us a c string. Then we have to malloc a copy to give to Unity. I reuse a method below that makes it easy. 
     return cStringCopy([helloString UTF8String]); 
    } 

    // Here is an example of getting a string from Unity 
    char* _combineStrings(const char* cString1, const char* cString2) 
    { 
     // This shows we can create two NSStrings* from the c strings from Unity 
     NSString *string1 = CreateNSString(cString1); 
     NSString *string2 = CreateNSString(cString2); 
     NSString *combinedString = [NSString stringWithFormat:@"%@ %@", string1, string2]; 
     // Same as before, have to go to a c string and then malloc a copy of it to give to Unity 
     return cStringCopy([combinedString UTF8String]); 
    } 
} 

//I also like to include these two convenience methods to convert between c string and NSString*. You need to return a copy of the c string so that Unity handles the memory and gets a valid value. 

char* cStringCopy(const char* string) 
{ 
    if (string == NULL) 
     return NULL; 

    char* res = (char*)malloc(strlen(string) + 1); 
    strcpy(res, string); 

    return res; 
} 

// This takes a char* you get from Unity and converts it to an NSString* to use in your objective c code. You can mix c++ and objective c all in the same file. 
static NSString* CreateNSString(const char* string) 
{ 
    if (string != NULL) 
     return [NSString stringWithUTF8String:string]; 
    else 
     return [NSString stringWithUTF8String:""]; 
} 

在問一個問題之前,您應該嘗試詢問Google。

來源:I found this code here

+1

記住要再次釋放字符串後的字節變成了管理的字符串或將有內存泄漏,如果你繼續使用malloc,字符串需要與元帥的C#代碼被釋放。 FreeHGlobal我相信。 – Chris