OSX - Using Objective-C to write Monkey libs?
Monkey Targets Forums/Desktop/OSX - Using Objective-C to write Monkey libs?
| ||
| How can we write addon-libraries for targets C++ or Desktop_Game using Objective-C on MacOSX? Somebody got an example, please? We can write C++ functions and import it with: Import "native/Window.cpp" The functions in Window.cpp get inserted directly into the final generated c++ code. This works. How is it possible to use this with Objective-C, so we can write a Cocoa GUI lib? .m files just get ignored: Import "native/Window.m" The generated code contains the comment: //#include "native/Window.m" I also tried to make a static lib with Xcode and include the resulting lib: Import "native/libWindow.a" #LIBS+="native/libWindow.a" Those files don't get copied to build folder and seem to be ignored. |
| ||
| Answer: We can just use Objective-C code within C++ codes, when using the Desktop_Game target. Window.monkey Strict
Import "Window.cpp"
Extern
Function CreateWindow:Int(x:Int,y:Int,width:Int,height:Int,title:String)="CreateWindow"
Public
Function Main:Int()
CreateWindow(100,100,800,600,"My Monkey Window")
Return 0
EndWindow.cpp #include <cocoa/cocoa.h>
@interface MyWindowDelegate : NSObject<NSWindowDelegate>
@end
@implementation MyWindowDelegate
- (BOOL)windowShouldClose:(id)window {
[window release];
NSApplication *app = [NSApplication sharedApplication];
[app terminate:app];
return YES;
}
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
return NSTerminateNow;
}
@end
int CreateWindow(int x, int y, int width, int height, String title) {
NSApplication *app = [NSApplication sharedApplication];
unsigned int styleMask = NSTitledWindowMask | NSClosableWindowMask | NSMiniaturizableWindowMask | NSResizableWindowMask;
NSWindow *w1 = [ [NSWindow alloc]
initWithContentRect:NSMakeRect( x, y, width, height )
styleMask:styleMask
backing:NSBackingStoreBuffered
defer:NO
];
MyWindowDelegate *delegate = [[MyWindowDelegate alloc] init];
[w1 setDelegate:delegate];
[w1 makeKeyWindow];
[w1 makeKeyAndOrderFront:app];
[w1 setTitle:title.ToNSString()];
[w1 setAcceptsMouseMovedEvents:YES];
[w1 setPreventsApplicationTerminationWhenModal:NO];
[w1 setReleasedWhenClosed:YES];
[w1 center];
[w1 update];
[w1 display];
//[app runModalForWindow:w1];
[app run];
//[w1 release];
return 0;
} |
| ||
| Updated to close the window and terminate the app. |
| ||
| Hi Danilo, i have no idea about Objective-C , but i have add new features to trans ext. with PrjImport new keyword , we can include many files with our project , it's file has corresponding language compiler, such as c,cpp,asm,s,zir. and each file will compiled and linked to our final exe file, now it works for gcc under windows. |