C++で作った関数をCから呼び出す – プログラミング – Home

C++で作った関数をCから呼び出す
 
通知
すべてクリア

C++で作った関数をCから呼び出す


リノ
 リノ
(@リノ)
ゲスト
結合: 24年前
投稿: 4
Topic starter  

はじめまして。

VC++で作った関数をCのプログラムから呼び出したいので、
下のようなプログラムを組んでみました。

---source.h---
#ifdef __cplusplus
extern C {
#endif
int Func(int);
#ifdef __cplusplus
}
#endif

---source.cpp---
#include source.h

extern C int Func(int x)
{
return x%100;
}

---call.c---
#include <stdio.h>
#include source.h

int main(void)
{
printf(%d\n,Func(12345));
return 0;
}

これをLSIC86(試食版)でコンパイルしてみたらexeファイルはできるのですが、
関数をうまく呼び出せていません。
コンパイルしてみると

call.c6: Warning: function 'Func' undefined -- assumed to be int
lld @link.i
call.obj(call.c): Undefined symbol: Func_

とでます。
自分はすごく初心者なので、初歩的なミスをしているのかもしれませんが
どなたかここがおかしいというご指摘がありましたら
教えていただければ幸いです。
よろしくお願いします。


引用解決済
トピックタグ
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

VC++とLSI Cを混ぜることはできません。
#というか,別の会社のコンパイラを混ぜて使うことはできないと考えるべき。


返信引用
リノ
 リノ
(@リノ)
ゲスト
結合: 24年前
投稿: 4
Topic starter  

あの、上の自分の書き込みで少し抜けてることがありました。
自分はVC++でDLLを作って、そのDLLの関数をCから呼び出したいんです。
それでもやっぱり無理なのでしょうか?

質問ばかりですみません。
自分の知識が足りないもので、自分のやろうとしていることが
うまく伝えることができていないかもしれません。

以前「C++で作った関数をCから呼び出す」ということができると
聞いたものですから、このやり方でできると思ったのですが・・・

どんなことでもいいので何かご指摘がありましたら
よろしくお願いします。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 1
 

>自分はVC++でDLLを作って、そのDLLの関数をCから呼び出したいんです。
このこと自体はできます。しかし,LSI-Cの試食版はMS-DOS用のコンパイラですから,呼び出すことはできません。
呼び出せるのは,Windowsの,作ったDLLに合わせたバージョンに対応したコンパイラを使った場合に限られます。

>?以前「C++で作った関数をCから呼び出す」ということができると
>聞いたものですから、このやり方でできると思ったのですが・・・
これもできます。ただし,同等の中間ファイルを生成する場合に限ります。


返信引用
リノ
 リノ
(@リノ)
ゲスト
結合: 24年前
投稿: 4
Topic starter  

たびたび申し訳ないです。

>Windowsの,作ったDLLに合わせたバージョンに対応したコンパイラ
というのは、どういう意味なのでしょうか?
自分がDLLを作った環境で使えるコンパイラという事ですか?


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

32bitのDLLを作ったのであれば32bit Windowsの実行ファイルが生成可能なコンパイラ,ということです。

32bitDLLを生成した場合,
・LSI-C試食版は32bit Windows上で使えますが,生成されるのはMS-DOS用のコードなので使えません。
・VC++ 1.0は32bit Windows上で使えますが,生成されるのは16bit Windows用のコードなので使えません。
・Borland C++ Compiler 5.5.1は32bit Windows上で使え,32bit Windows用のコードを生成するので使えます。
#全て同一CPUの話。


返信引用
リノ
 リノ
(@リノ)
ゲスト
結合: 24年前
投稿: 4
Topic starter  

YuOさん何度も答えいただいてどうもありがとうございました。
とても詳しい説明でよくわかりました。

自分には根本的に知識が足りないのでもっと勉強してがんばろうと思います。
また質問することがあるかもしれませんが、その時はよろしくお願いします。

本当にありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました