|
From: | dr_clow |
Subject: | Swift calling into GNUStep Progress |
Date: | Sat, 5 Aug 2023 21:03:52 -0500 |
I just wanted to update everyone on my progress and solicit some help if possible. State of my progress: I've had a lot of success patching into GNUStep's libobjc2 C runtime from within Swift. I've been able to create NSWindows through Swift, call methods, et cetera. You can see my progress here https://github.com/austintatiousness/GNUStepSwiftBridge . This assumes that you're running this from within OnFlapp's GNUStep Desktop. Solution to objcSendMessage: Because Swift doesn't allow variable argument parameters, I had to create various versions of objcSendMessage (e.g forSwift_objcSendMessage1, forSwift_objcSendMessage2, forSwift_objcSendMessage3) to accommodate various number of arguments. Problem 1: NSWindow initWithContentRect:styleMask:backing:defer 1) I am having trouble with the NSWindow.initWith… functions. I am sure that it is because of the way that I am casting all the values from Swift into to the C implementation. Either I just don't understand how the casting between Swift and C works OR I am just using the wrong variables. I include a C version of the NSRect struct in my project. let nsWindowClass = objc_getClass("NSWindow") var allocatedObject = forSwift_objcSendMessage(&nsWindowClass!.pointee, sel_registerName("alloc")) var styleMask: UInt64 = 1 + 2 + 4 var backingStoreType: UInt64 = 0 var deferr: UInt8 = 0 var rect = NSRect(x: 200, y: 200, width: 300, height: 300) allocatedObject = forSwift_objcSendMessage4(&allocatedObject!.pointee, sel_registerName("initWithContentRect:styleMask:backing:defer:"), &rect, &styleMask, &backingStoreType, &deferr) I've tried several times to change the various integer types from UInt64 to UInt8 to no avail. Problem 2: Registering new classes with the runtime. This is the current state of the HelloWorld target: For reasons I cannot explain, I am able to allocate a new obj-c object with objc_allocateClassPair and then register it using objc_registerClassPair but when objc_getClass using the same class name that I registered, it returns nil. Any help would be appreciated. I am currently unable to make progress on adding delegates with out being able to register new ObjC classes with the runtime. Thanks! |
[Prev in Thread] | Current Thread | [Next in Thread] |