5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

CからC++を呼び出すには?

1 :デフォルトの名無しさん:01/09/09 02:11
main関数がC言語で書かれている場合に、
C++で書かれた関数を使うことは可能で
しょうか?

どんなやり方でもいいので、教えてください。

2 :デフォルトの名無しさん:01/09/09 02:23
>>1
extern "C" {
/*〜C++のパブリックなインタフェース*〜/
};

3 :デフォルトの名無しさん:01/09/09 02:28
それはマングリングを防ぐためのものですよね?

試してみてダメだったと思うのですが・・・

もう一回やってみます。

4 :2:01/09/09 02:31
extern"C"の中に thisを使うクラスメソッドなんか
置いても駄目だからね>1
Cで認識する普通の関数形式を記述の事。

5 :デフォルトの名無しさん:01/09/09 06:26
gcc/g++と推測。

-lstdc++ を付加とか。

6 :デフォルトの名無しさん:01/09/09 08:56
COMではいかんの?
obj->lpVtbl->method() をつかって。

7 :デフォルトの名無しさん:01/09/09 13:52
>>4
> extern"C"の中に thisを使うクラスメソッドなんか

関係ないツッコミだけど一般に「クラスメソッド」と言った場合、
「インスタンスメソッド」に対する言葉で、クラスメソッドとは
C++ で言えば static なメンバ関数のことをいう。
従ってクラスメソッドには this は渡されない。

8 :1:01/09/10 00:12
>>5
そうです。gccです。

明日試す予定です。

C++用のライブラリはちゃんとリンクしたと思うので、大丈夫だと思うのですが。

とりあえず結果は明日報告します。

>>6
環境が環境なので〜〜

9 :デフォルトの名無しさん:01/09/10 02:12
クラスのメンバ関数をCから呼び出したい場合、いちばん簡単なのは
そのメンバ関数をstatic宣言してしまえばよい。
当然static宣言されたメンバ関数はインスタンスで共用されるので
注意が必要。
って、質問の内容と違うかな?

10 :デフォルトの名無しさん:01/09/10 03:27
>>9
> クラスのメンバ関数をCから呼び出したい場合、いちばん簡単なのは
> そのメンバ関数をstatic宣言してしまえばよい。

で、それをどうやって C から呼ぶのかな?
mangle って何だか知ってる?

11 :デフォルトの名無しさん:01/09/10 08:13
なんでもいいけど C++ は C の文法を含んでるんだから、main 側も含めて
ソースがあるものは全部 C++ でコンパイルするのが一番簡単じゃないかな。
それならリンケージで悩む必要もないし。

ソースがない関数だけ extern "C" すればよいことだし。

12 :1:01/09/11 01:20
試して思い出した。

リンクで失敗してるんじゃなくて、それ以外の原因だった・・・鬱だ。

何やらmips1とかmips3がどうこう、と出るのです。

後、切り詰められた?みたいなメッセージが。


元々のプロジェクトが膨れ上がっている状態なので、
とても原因を探す気にならない・・・鬱だ。

13 :1:01/09/11 01:26
>>11
C++はCに比べてポインタの型チェックが厳しいので、
昔いや〜んな思いをしたことがあるのです。
NULL、void *が使われてるあたりで、ひっかかることが多いはず。

しかも自分が書いたソースじゃないので・・・

14 :5:01/09/11 02:37
>>13
いや〜んって言う前に、C++コンパイラが何を伝えようとしている
のか考えたほうがいいと思うぞ。
まぁ、いや〜んな(というかキャストが煩雑になる)シーンは無
いとはいわんが。関数ポインタ周辺とか。

>>12
全然わからん。
そのまま貼れって。ファイル名やクラス名を適当に書き換えれば
問題なかろ。

#俺が答えられるかどうかは知らんけどねー。

15 :デフォルトの名無しさん:01/09/12 04:39
適当にファイル名を変えたりしてるけど、こんな感じ。
ちなみにクロスコンパイル環境でやってマッスル。
コンパイラ自体を間違えてる、ということは無いとは
思うが・・・ちゃんと確認したかどうか覚えてない・・・

C++に書き直すは確実ですが、元のソースがCVSで管理されて
いるので、登録し直すのも面倒。ファイルが100以上あることを
考えると、キャストの部分を書き直すのすら面倒なのです。

collect2: ld terminated with signal 11 [セグメンテーション違反です], core dumped
〜〜/bin/ld: file_A.o: ISA mismatch (-mips1) with previous modules (-mips3)
Bad value: failed to merge target specific data of file lib_A.a(file_A.o)
lib_A.a(file_A.o): In function `FunctionTest':
file_A.o(.text+0x8): relocation truncated to fit: R_MIPS_16 data
file_A.o(.text+0x10): relocation truncated to fit: R_MIPS_16 data
file_A.o(.text+0x1a): relocation truncated to fit: R_MIPS_16 data
file_A.o(.text+0x2a): relocation truncated to fit: R_MIPS_16 data
make: *** [target.elf] Error 1

16 :デフォルトの名無しさん:01/09/12 04:41
単発スレにレスするお前等の神経が(以下略)>>1-15

17 :nat241.ayu.ne.jp:01/10/13 23:24
test

18 :デフォルトの名無しさん:01/10/14 09:07
>>17 見〜つけた!

6 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)