3

ここに投稿された他のほとんどの Objective-C の質問と同様に、私も ObjC の初心者です。

C# および C++ で記述された既存の製品に基づいて iOS アプリケーションを作成しています。

必要に応じてコードをブロックするためにいくつかの #ifdef を提供するだけで、iOS デバイスで直接使用することを望んでいたライブラリ全体を C++ で作成しました。たとえば、Winsock を使用して HTTP 要求を作成するための C++ クラス全体があります。API のこの部分を Obj-C に変換できるようにするために、NSURL、NSStrings、等

しかし、C++ で記述した Obj-C(++) メソッドに INTO を渡すことができないようです。そして、私はここで、確かに、失われた大義に多くの時間を費やす前に、これが可能であるかどうかを知りたかったのです.

私の理解では、Obj-C が構築/設計された方法で、実際にはすべての C コードが舞台裏で使用されているため、2 つの言語をマージすることは難しくありません。

私はここで間違っていますか?たとえば、次のようなことができますか。

class NameValueCollection {
  NameValueCollection() { };
  NameValueCollection(std::string key, std::string value);
  ~NameValueCollection();
...
};

次に、たとえば、Obj-C (実際には Obj-C++ で、ファイルがコンパイルされる言語を既に変更しています...)

-(BOOL)initWithValues:(NameValueCollection*) nvc result:(NSString*)result;

私はこれをやろうとしているのですか?もしそうなら、2つの代替案のうちの1つを行うことは可能ですか?

C++ クラス/オブジェクト/メソッド内から ObjC++ メソッドを呼び出す、または Obj-C++ メソッド内で C++ メソッドを呼び出す?

私は、最後の代替案がうまくいくと思っていたことを認めなければなりません。最初の代替案がうまくいくとかなり確信していましたが、最初の選択肢が可能であれば最高です. Obj-C++でこれを試みることによって正しいアプローチを取っている場合でも、これはC++メソッドの代わりにC関数を呼び出してObj-Cでのみ可能であるため、私たちの事前に定義された (および事前にデバッグされた) オブジェクトは、iOS アプリケーションの右にあり、ゴムがことわざと出会う場所で Obj-C++ コードを置き換えるだけです...

私は C++ ライブラリ コードの最初の作成者であるため、実際には、必要に応じて変更を加えることができます。また、プリプロセッサを有利に使用することもできますが、C++ 側で変更するコードが少なくなればなるほど、はるかに良いです!:)私はC++コードをDynlibなどにビルドしていません。ソース管理レベルでプロジェクト間でファイルを共有しているだけです。しかし、私は、この全体が私が試みている方法で機能するようにするためのあらゆるアイデアを受け入れます.

よろしくお願いします...

4

1 に答える 1

0

obj-c++ 内で c++ クラス/メソッドを使用できることは間違いありません。私は、C++ である BulletPhysics ライブラリを使用して iOS 開発を行ってきましたが、その機能を問題なく使用できます。ライブラリのソース ファイルをプロジェクトに追加する必要があると思います。BulletPhysics では、ライブラリを外部でフレームワークとしてコンパイルしてからフレームワークをインポートすると、正しく機能しませんでした。そこで、ライブラリのソース ファイルをプロジェクトに追加し、必要なヘッダーを #include するだけで、xcode がライブラリとソース コードのコンパイルを処理し、それが機能しました。

ライブラリ ヘッダーを使用しているファイルの拡張子に .mm を使用していることを確認してください。

于 2012-06-27T15:18:08.267 に答える