discuss-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Swift calling into GNUStep Progress


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!

reply via email to

[Prev in Thread] Current Thread [Next in Thread]