Yep, stringWithUTF8String/UTF8String works well for std:string. I recommend creating NSStringForStdString() and StdStringForNSString() utility functions, and possibly an NSString category to add -stdStringValue.
-Rob On Thu, Mar 20, 2008 at 4:05 PM, Jeff LaMarche <[EMAIL PROTECTED]> wrote: > What about the UTF8String method? It replaces the old lossyCString > method and should give you a pointer to a c string > > Sent from my iPhone > > On Mar 20, 2008, at 3:34 PM, Jeremy <[EMAIL PROTECTED]> wrote: > > > Thanks everyone! > > Using a void* for the member variable of my wrapper class did the > > trick and I now have my Objective C code calling my C++ code! > > > > What is the best way to pass strings from my Objective C code to my C > > ++ code though? > > I started looking at the unichar definition and the methods on > > NSString, but would like to know if there is an obvious standard for > > dealing with the unicode issues. > > > > > > On Mar 20, 2008, at 1:32 PM, Rob Napier wrote: > > > >> Say you have a C++ object called MyObject in the namespace myapp > >> that you want to access through your ObjC. What I tend to do is > >> create an ObjC++ object called MyObjectWrapper that owns a > >> myapp::MyObject and presents a pure ObjC interface to its methods. > >> Users of MyObjectWrapper don't have to include MyObject.h. The > >> trick is that you need to use void* rather than a real class type > >> in MyObjectWrapper.h like this: > >> > >> typedef void* MyObjectPtr > >> > >> @interterface MyObjectWrapper : NSObject > >> { > >> MyObjectPtr myObject; > >> } > >> > >> That will get you around having C++ class definitions in your > >> header. For a large system, hoist Wrapper into a superclass that > >> can handle setting and releasing its owned object. This is also a > >> good place to put routines to convert vectors and lists into > >> NSArrays, and other similar handy routines. > >> > >> I still don't think ObjC++ is the best way to learn Cocoa. As has > >> been discussed on this list before, the best way to learn Cocoa is > >> in the language Apple uses and best documents. From there, ObjC++, > >> RubyCocoa, etc are all useful tools for helping people who already > >> understand ObjC. > >> > >> -Rob > >> > >> On Thu, Mar 20, 2008 at 12:40 PM, Jeremy <[EMAIL PROTECTED]> wrote: > >> Thanks for the input guys, I really appreciate the help. > >> > >> I do have a lot of C++ code that I would like to use and put behind > >> a Cocoa front end, so I think that using Objective C++ classes as > >> wrapper classes around my C++ classes is the route I would like to > >> take. > >> > >> Anyone have an example of such a wrapper class so I can get an idea > >> of what is the preferred methodology? > >> I'm guessing that you create an Objective C++ class with a member > >> variable that is a C++ class and then mirror the methods from the C+ > >> + class? > >> > >> I'm worried that I'll still end up having to import the header file > >> for my C++ class in my Objective C source file though, which caused > >> a lot of compile errors previously. > >> > >> > >> On Mar 20, 2008, at 12:32 PM, John Stiles wrote: > >>> Without starting a religious war, I have to disagree with this. > >>> > >>> ObjC++ is probably a bad idea if you are a novice programmer in > >>> general, but I think it also has some really good things going for > >>> it, and having written huge amounts of ObjC++ code, I think it's > >>> perfectly straightforward to use. It is by far your best bet for > >>> writing cross-platform code that uses a native Cocoa front end. > >>> > >>> > >>> Rob Napier wrote: > >>>> > >>>> On Wed, Mar 19, 2008 at 4:12 PM, Jeremy <[EMAIL PROTECTED]> wrote: > >>>> > >>>>> Hi. > >>>>> > >>>>> I am just starting to learn Cocoa and would like to use standard > >>>>> C++ > >>>>> classes from my Objective C/C++ classes. > >>>>> > >>>> You really don't. You think you do (probably because you know C++), > >>>> but then you enter the crazy messed up world of Objective-C++ and > >>>> discover that you really wish you hadn't. A bit of an > >>>> overstatement, > >>>> yes, but really I'd recommend against using ObjC++ unless you have > >>>> existing C++ code that you have to bridge to, and then it's best > >>>> used > >>>> just to wrap the C++ classes so that ObjC can deal with them. Learn > >>>> Cocoa in pure ObjC. > >>>> > >>>> ObjC and C++ have very different models for managing memory, types, > >>>> pointers and well, just about everything. Memory management in > >>>> particular is a real hassle. ObjC++ strips away the safety nets > >>>> from > >>>> both ObjC and C++ because now you have to track two very different > >>>> ways of managing memory (retain counting versus ref variables for > >>>> instance). > >>>> > >>>> > >>>>> Is there any known documentation on how to do this, or does anyone > >>>>> have any pointers? > >>>>> > >>>>> I tried creating a new object of my C++ class and calling a > >>>>> method on > >>>>> it in a .m file and received a bunch of errors (including new not > >>>>> being found). > >>>>> > >>>>> I then changed my .m file to a .mm file and all of the errors went > >>>>> away except for one: > >>>>> "cannot find interface declaration for 'MyClass'" > >>>>> > >>>> This probably means that ObjC expects there to be an ObjC class > >>>> called > >>>> MyClass (rather than a C++ class called MyClass; they're completely > >>>> unrelated class structures). I suspect that you accidentally put > >>>> "@class MyClass" somewhere rather than "class MyClass", or possibly > >>>> wrote "@interface MyClass" somewhere. Alternately, you failed to > >>>> put > >>>> "class MyClass" above the declaration of m_pMemberVariable and so > >>>> the > >>>> compiler assumed MyClass was an ObjC class (this is less likely > >>>> since > >>>> you should have gotten a compiler error elsewhere for that error). > >>>> > >>>> I strongly recommend naming your ObjC and ObjC++ classes > >>>> differently. > >>>> I typically name the ObjC++ classes ending in "Wrapper" but that's > >>>> because I only ever use these classes to wrap existing C++ classes > >>>> defined in separate C++-only projects. > >>>> > >>>> Also, make sure that you're working in the right namespace. You may > >>>> need to say "new myNamespace::MyClass" here. > >>>> > >>>> ObjC++ is deep magic. It is not a good place to learn Cocoa. It > >>>> is a > >>>> useful tool once you know Cocoa and need to integrate it at key > >>>> points > >>>> with C++. > >>>> > >>>> -Rob > >> -- > >> Rob Napier -- Software and Security Consulting -- http:// > >> robnapier.net > >> "Those who would give up essential liberty to purchase a little > >> temporary safety, deserve neither liberty nor safety." -- B. > >> Franklin, Printer > > > > _______________________________________________ > > > > 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: > > http://lists.apple.com/mailman/options/cocoa-dev/jeff_lamarche%40mac.com > > > > This email sent to [EMAIL PROTECTED] > -- Rob Napier -- Software and Security Consulting -- http://robnapier.net "Those who would give up essential liberty to purchase a little temporary safety, deserve neither liberty nor safety." -- B. Franklin, Printer _______________________________________________ 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: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to [EMAIL PROTECTED]