> Le 7 sept. 2018 à 19:46, Casey McDermott <supp...@turtlesoft.com> a écrit : > > We need to link some of our C++ classes to a matching Cocoa class. > It's easy for Cocoa to reference C++ objects. Going the other way is harder. > > We have been using a linker class that has a void pointer to the Obj-C object > in the C++ header. We then cast it to a Cocoa object in the Obj-C++ source. > For example, in the C++ header we have: >
How are you setting the pointer ? If you are using ARC and want to get a strong reference on the object, you have to use __bridge_retained, which tell ARC to keep the reference valid. Once you are done with the objc object, you have to release it. > void *mCocoaPopupPtr = nil; > > Then in the source: > > void GSCocoaPopupLinker::setCocoaFieldVisible(const BOOL inValue) > { > if (mCocoaPopupPtr != nil) > { > GSPopupButton *cocoaPopup = (__bridge GSPopupButton > *)mCocoaPopupPtr; > [cocoaPopup setHidden : !inValue]; > } > } > > Problem is, with ARC turned on, the pointer is never nil, so it crashes. > The void pointer somehow becomes an NSAtom instead of 0. > > There's very little documentation on NSAtom, but it appears to be Apple's way > to > use the excess bits in a 64-bit address to store class info. > > Is there some other way to test for an invalid void pointer? > > Thanks, > > Casey McDermott > TurtleSoft.com > _______________________________________________ > > Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) > > Please do not post admin requests or moderator comments to the list. > Contact the moderators at cocoa-dev-admins(at)lists.apple.com > > Help/Unsubscribe/Update your Subscription: > https://lists.apple.com/mailman/options/cocoa-dev/mailing%40xenonium.com > > This email sent to mail...@xenonium.com _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com