vaguely

和歌山に戻りました。ふらふらと色々なものに手を出す毎日。

C++に触れてみる

openFrameworksやOpenNIと、ここ最近C++に触れることが多くなったのでちょっと調べてみたメモ。

ヘッダファイル

プログラムのファイルがヘッダと実装部分に分かれているのはObjective-Cと同じ。

ただ、C++の場合はヘッダで定義したメソッドを実装部に記述していなくてもエラーや警告は出ません。

そのため、一つのヘッダを複数の実装ファイルに結びつけることで、まとめてincludeすることができます。

ヘッダではクラス、メソッドの宣言を行いますが、privateなインスタンスやメソッドを記述してしまうと、実装ファイルからアクセスできなくなるため、そちらは実装部分で扱う必要がありそうです。

また、ヘッダと実装部の両方でクラスを記述してしまうと、重複定義とエラーになります。

この辺りも一瞬戸惑いますね(苦笑)。

dll

C++で書いたプログラムをC#から利用するには、C++の方をdll(Windows)、so(Linux)、dylib(Mac)といったライブラリで作成して呼び出す必要があります。

その際、呼び出されるメソッドに[extern "C" __declspec (dllexport)]と記述が必要になるのですが、ここで戻り値をstring型にすると警告が出ます。

理由は上記のメソッド内ではstring型を持たないC言語を使用するためで、値を保持する必要がないのであれば、以下のようにすれば文字列を返すことができます。

char *StartTest(){

static char chrTest[] = "test";<br>
    return chrTest;<br>

}

他に[malloc]を使って動的にメモリを確保するべき場合もある、ということで、この辺りは状況にあわせて調整が必要なようです。

これまで当たり前のように使ってきた方法が使えない、というのはかなり戸惑いますが、空き時間を使ってちょっとずつ学んでいきたいところです。