Skip to content

Instantly share code, notes, and snippets.

@brandenr
Last active March 10, 2020 18:57
Show Gist options
  • Save brandenr/5118113 to your computer and use it in GitHub Desktop.
Save brandenr/5118113 to your computer and use it in GitHub Desktop.
iOS Unity Plugin
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:""];
}
@chesterbr
Copy link

Thanks for the gist. Question: wouldn't every call _helloWorldString() leak one malloc instance? If so, any suggestions on how to memory-manage those? (or is it beeing free-ed behind the scenes somehow?)

@chesterbr
Copy link

@jonnyijapan
Copy link

chesterbr: that page seems down - but do you mean that the above code using malloc will in fact not cause memory leaks?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment