OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

BorlandC++Builder5.0でリンカエラー

  • すぐに回答を!
  • 質問No.156288
  • 閲覧数531
  • ありがとう数1
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 48% (121/248)

現在A/D変換ボードの制御をしようとしています。
ボードのインストールも行なったのですが、以下のエラーが出て困っています。

外部シンボル 'AdOpen' が未解決(C:\PROGRAM FILES\BORLAND\CBUILDER5\PROJECTS\MAG\MAIN.OBJ が参照)と出てしまいます。

mainはシンプルなのですが...
void __fastcall TForm1::OpenDevClick(TObject*Sender)
{
device_handle = AdOpen("FBIAD1");
if(device_handle == INVALID_HANDLE_VALUE){
ShowMessage("Err : デバイスのオープンに失敗");
return;
}
}

そもそもこのエラーはなぜ出るのですか?
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル14

ベストアンサー率 50% (1122/2211)

> [リンカ エラー]'FBIAD.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
>
> さっぱりわかりません(^^;)

コンパイルしたもの(.objなど)には、決められたフォーマットが幾つかあって、
それが期待したのと違う(OMF というフォーマットで読もうとしてるんだけど、
タイプが違う、もしかしたら COFF というフォーマットかも)ということみたい。

多分 VC++ だったらいけると思う。

もしくは、変換ツール(coff2omf みたいな)が BC++ についてるとか。

A/D変換ボード用のライブラリは、DLL で提供されているものなんでしょうか?
であれば、implib で、インポートライブラリを DLL から作り直しましょう。
お礼コメント
kenichi

お礼率 48% (121/248)

ありがとうございました!無事解決しました(^^)
何とかこれで卒研が先に進めそうです。この調子だと前途多難ですが(笑)

今までDLLとLIBとかの関係が分からなかったのですが、何となく分かった気がします。

Windows\SYSTEMにインストールされていたFbiAd.dllからimplibでFbiAd.libを作り、リンクさせた所、バッチリ動きました。
しかし、普通はVC++でDLLを提供するものなのですか?Borlandはマイナーなのかなぁ...
投稿日時 - 2001-10-28 00:25:17
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル14

ベストアンサー率 50% (1122/2211)

原因として、考えられることを二つほど。 ・AdOpen()を持っているライブラリをリンクのときに指定していない 質問の書き方が、ちょっとプログラムを知っている人のようなので、こういうミスは 無いだろうな、と想像します。本命は、こちら。 ・AdOpen() は C の関数であり、そのプロトタイプ宣言が適切にされていない 細かく分類すると、 ・提供されているインクルードファイル ...続きを読む
原因として、考えられることを二つほど。

・AdOpen()を持っているライブラリをリンクのときに指定していない

質問の書き方が、ちょっとプログラムを知っている人のようなので、こういうミスは
無いだろうな、と想像します。本命は、こちら。

・AdOpen() は C の関数であり、そのプロトタイプ宣言が適切にされていない

細かく分類すると、

・提供されているインクルードファイルをインクルードしていない
・提供されているインクルードファイルが C++ で使うことを想定されて書かれていない
・そもそもプロトタイプ宣言が書いてあるインクルードファイルが無くて、自分でも宣言していない

の三種類があります。

C++ は、関数のオーバーロード(引数の型や個数が違えば、同名の関数でも異なった
実装ができる)の仕組みを持っているので、いわゆる C の関数とは区別されます。

AdOpen() の引数は、(私には)想像するしかないんですが、例えば、以下のような
プロトタイプ宣言が、(自分で書くかどうかは別にして)どこかに必要です。

extern "C" int AdOpen(const char*);
補足コメント
kenichi

お礼率 48% (121/248)

回答ありがとうございます。
リンクのとき指定というのは、どういうことですか?プロジェクトに.libを追加してこの問題はなんとか解決できましたが、またエラーが出てしまいしました。

[リンカ エラー]'FBIAD.LIB' contains invalid OMF record, type 0x21 (possibly COFF)

さっぱりわかりません(^^;)

今は学生です。卒業研究でA/Dコンバータを使わないといけないのですが、初期化の段階で詰まってしまっています。
投稿日時 - 2001-10-26 17:29:50
  • 回答No.3
レベル14

ベストアンサー率 50% (1122/2211)

> Windows\SYSTEMにインストールされていたFbiAd.dllからimplibでFbiAd.libを作り、リンクさせた所、バッチリ動きました。 > しかし、普通はVC++でDLLを提供するものなのですか?Borlandはマイナーなのかなぁ... 解決したようで良かった。 提供の形態に、どれが普通なのか、は一概に言えませんが、形態を決める一番大きい 理由は、「提供者 ...続きを読む
> Windows\SYSTEMにインストールされていたFbiAd.dllからimplibでFbiAd.libを作り、リンクさせた所、バッチリ動きました。
> しかし、普通はVC++でDLLを提供するものなのですか?Borlandはマイナーなのかなぁ...

解決したようで良かった。

提供の形態に、どれが普通なのか、は一概に言えませんが、形態を決める一番大きい
理由は、「提供者が、どの開発環境を持っているか?」だと思います。

開発用のライブラリであれば、利用者が広がれば、その要求に応えるために、両方の
ライブラリが提供されているケースはあります(例えば、lzh 展開用の UNLHA なんか)。

また、バイナリだと、どうしてもそういうケースはありますから、ソースで提供され
ている、とかね。

かくいう私も、BC++ は(雑誌の付録のCDなんかで)持ってはいるものの、使ったことが
ありません。必要があれば、使うつもりはあるんですけどね。
このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ