dポイントプレゼントキャンペーン実施中!

表題ですが
Eclipse+JAVAでJNAを使用しCコードを使用したいです。
Eclipse上はWindowsですが、運用はlinuxです。
Cのコンパイラはgccかg++でlinux上で共有ライブラリを作成しています。

試してみると拡張子.c、つまりc言語なら問題なく動かせます。
しかしC++形式、クラス使用のcppにすると動作せずcppの関数コール地点で
強制終了します。

JNAeratorを使用しないとC++は使用できないのでしょうか?

A 回答 (1件)

JNAは知りませんが、JNAが直接C++関数に対応していないなら無理でしょう。


一般にCの関数とC++の関数ではリンカで使う関数名の命名規則が違います。C標準は関数名の最初にアンダースコア(_)を付けるだけですが、C++では引数型の符号化文字列が付加されます。それでJNAがC関数のつもりでC++関数を呼び出そうとすると、そのような名前の関数が見つからずに落ちる可能性があると思われます。
別言語から使うC++関数はextern "C"で宣言しておくのが普通です。
当然クラスのメンバ関数などは呼び出せないので、C風のグローバル関数をextern "C"したラッパー関数を用意することになると思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
extern "C"を付加し対応できました。
重ねながらご教授大変ありがとうございました。

お礼日時:2016/11/25 22:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!