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]
_______________________________________________

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]

Reply via email to