現在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;
}
}

そもそもこのエラーはなぜ出るのですか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

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


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

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

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

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

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

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

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

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

お礼日時:2001/10/28 00:25

> Windows\SYSTEMにインストールされていたFbiAd.dllからimplibでFbiAd.libを作り、リンクさせた所、バッチリ動きました。


> しかし、普通はVC++でDLLを提供するものなのですか?Borlandはマイナーなのかなぁ...

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

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

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

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

かくいう私も、BC++ は(雑誌の付録のCDなんかで)持ってはいるものの、使ったことが
ありません。必要があれば、使うつもりはあるんですけどね。
    • good
    • 0

原因として、考えられることを二つほど。



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

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

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

細かく分類すると、

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

の三種類があります。

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

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

extern "C" int AdOpen(const char*);

この回答への補足

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

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

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

今は学生です。卒業研究でA/Dコンバータを使わないといけないのですが、初期化の段階で詰まってしまっています。

補足日時:2001/10/26 17:29
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qハーフインターチェンジの都留インター、どう制限?

近いうちに中央道で勝沼インターから都留インターまで利用したいと思っています。
JHのナビで検索したら都留インターは「ハーフインターチェンジ」とのことで困っています。

具体的には、午前中に勝沼インターから乗って都留インターで降りたいです。
夕方は逆のルート、都留インターで乗って勝沼インターで降りたいです。

過去の書き込み(
http://virus.okwave.jp/kotaeru.php3?q=624405)によると帰りの方は大丈夫そうですが。行きも大丈夫でしょうか?
この往復は問題なく利用できますか?ご存知の方お願いします。

Aベストアンサー

都留インターは大月方面からの流出と、大月方面の進入しかできないハーフインターの構造ですから、勝沼からきて降りることも、勝沼に向けて乗ることも出来ますよ。

Qtry{}catch(){}とデストラクタの関係を教えてください。

try-catchでメモリ確保を含むクラスをスローした場合、デストラクタはどの時点で働くのか、教えてください。たとえば、↓の使いかたは大丈夫でしょうか?

【1】
try{
 throw(CError(100, "エラー情報"));
}catch(CError& err){
 //ここでerrを参照しても問題ないのでしょうか?
}

【2】
try{
 CError err(100, "エラー情報");
 throw(err); // (1)
}catch(CError& err){
 //ここでerrを参照しても問題ないのでしょうか?
 //まだデストラクタはちゃんと動作するのでしょうか?
 //catchが呼び出し元のメンバであったりしても大丈夫なのでしょうか?
}

宜しくお願いします。

Aベストアンサー

【1】【2】どちらの場合も問題がありません。
コンパイラが必要に応じてerrオブジェクトのコピーを作成します。
デストラクタが呼び出されるタイミングはコンパイラに依存するところもあると思いますが、
例えばVC7.1では【2】は以下のように動作します。
(1) errオブジェクトのコンストラクタが呼び出される
(2) CErrorクラスのテンポラリオブジェクト(以下a)のコピーコンストラクタが呼び出される。
(3) errオブジェクトのデストラクタが呼び出される
(4) catch文まで到達
(5) aオブジェクトのデストラクタが呼び出される。

VC7.1では、【1】は以下のように動作します。
(1) errオブジェクトのコンストラクタが呼び出される
(2) catch文まで到達
(3) errオブジェクトのデストラクタが呼び出される。

コンパイラがオブジェクトのコピーを省略しているようです。

Q複数のオーディオインターフェイスやMIDIを一つのPCで使うのって可能ですか?

複数のUSBオーディオインターフェイスやMIDIインターフェイスを一つのPCで使うのって可能なんですか?

私はUSBオーディオインターフェイスを一つ持っているんですが、2万くらいの安いものなので
もし買い増したいとき

複数のオーディオインターフェイスを一つのPC
で使うことって可能なんでしょうか?

例えば
MIDIインターフェイスがついてないUSBオーディオインターフェイスを持っていて
新たにMIDI機能付きのキーボードを買って付け加えて…
さらに、また別のUSBインターフェイスを付け加えたりして…

一つのPCの 一つのDAWソフトで複数のオーディオインターフェイスを管理し音楽を作るのは可能なんでしょうか?

DAWのソフトによりますか?
それとも、大体の主流のDAWソフトならできるんでしょうか?

よろしくおねがいします。

Aベストアンサー

・入力用オーディオインターフェースと出力用オーディオインターフェースを別々にする。
・オーディオインターフェースMIDIインターフェースを別々にする。

までは、一応は可能です…が、動作上コントロールが難しくなるだけで、利点の方が少ないので、2台のオーディオインターフェースを使うパターンの方は、普通は誰もやらないです。

つまり質問の例で
>MIDIインターフェイスがついてないUSBオーディオインターフェイスを持っていて
>新たにMIDI機能付きのキーボードを買って付け加えて…
と、ここまでは有りです。が

>さらに、また別のUSBインターフェイスを付け加えたりして…
は、そもそも「付け加える」という発想をする人が少ないです。
PCのマシンパワーを食うだけだし、より性能の良いインターフェースを買ったなら、入出力共に性能が上の方1台で済ませる方が、機材安定面でも音質面でも有利だから…なので、わざわざ危ない橋を渡る人は居ません。
また、複数のオーディオインターフェースのドライバ同士がおかしな事になって、2台とも使えなくなる事もあります。

あと、インターフェースにバンドルのDAWでは、添付されたインターフェース以外では動かないものも多いです。

市販の主流のDAWなら、「入力i/f」「出力i/f」「MIDI i/f」の3つを別にする所までは『ソフト設定上では』可能になっている物が多いです。
ただ、前述のとおり、PCに複数のオーディオインターフェースを繋いだ時、PC側で2台を安定して認識/動作ができない事も結構多いので、普通はそういう「面倒で危なっかしいだけ」なことを進んでやる事はないです。

低性能なインターフェース2台より高性能なインターフェース1台の方が、全ての面で有利なので…

・入力用オーディオインターフェースと出力用オーディオインターフェースを別々にする。
・オーディオインターフェースMIDIインターフェースを別々にする。

までは、一応は可能です…が、動作上コントロールが難しくなるだけで、利点の方が少ないので、2台のオーディオインターフェースを使うパターンの方は、普通は誰もやらないです。

つまり質問の例で
>MIDIインターフェイスがついてないUSBオーディオインターフェイスを持っていて
>新たにMIDI機能付きのキーボードを買って付け加えて…
と、ここまで...続きを読む

Qvoid main(void){...}だとDosWindowが開くので

わざわざWindowsアプリにして以下のようにするしかないのでしょうか?

LONG WINAPI WinProcedure(HWND hW,UINT wM,UINT wP,LONG lP)
{
//ここに宣言を置く
switch(wM)
{
case WM_CREATE:
//ここに処理を置く
return 0;
default:
return(DefWindowProc(hW,wM,wP,lP));
}
}
WINAPI WinMain(HINSTANCE hI,HINSTANCE,LPSTR,int nCS)
{
WNDCLASSwc;
HWNDhW,hPW;
MSGms;

wc.lpszClassName="goo";
wc.lpfnWndProc=(WNDPROC)WinProcedure;
wc.hInstance=hI;
wc.style=CS_HREDRAW|CS_VREDRAW;
wc.cbClsExtra=NULL;
wc.cbWndExtra=NULL;
wc.hIcon=LoadIcon(NULL,IDI_EXCLAMATION);
wc.hCursor=LoadCursor(NULL,IDC_ARROW);
wc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wc.lpszMenuName=NULL;
RegisterClass(&wc);
hW=CreateWindow
(
"goo",
"教えて!goo",
WS_OVERLAPPED,
0,
0,
640,
456,
NULL,
NULL,
hI,
NULL
);
ShowWindow(hW,nCS);
UpdateWindow(hW);
while(GetMessage(&ms,NULL,NULL,NULL))
{
TranslateMessage(&ms);
DispatchMessage(&ms);
}
return (ms.wParam);
}

もっと簡単にDosWindowが開かないようにする方法はないのでしょうか?
もしないとすると上記記述でもっと簡単にできないでしょうか?

わざわざWindowsアプリにして以下のようにするしかないのでしょうか?

LONG WINAPI WinProcedure(HWND hW,UINT wM,UINT wP,LONG lP)
{
//ここに宣言を置く
switch(wM)
{
case WM_CREATE:
//ここに処理を置く
return 0;
default:
return(DefWindowProc(hW,wM,wP,lP));
}
}
WINAPI WinMain(HINSTANCE hI,HINSTANCE,LPSTR,int nCS)
{
WNDCLASSwc;
HWNDhW,hPW;
MSGms;

wc.lpszClassName="goo";
wc.lpfnWndProc=(WNDPROC)WinProcedure;
wc.hInstance=hI;
wc.style=CS_HREDRAW|CS_VREDRAW;
wc...続きを読む

Aベストアンサー

ウィンドウを開く必要がないなら、mainをWinMainに変更するだけで良いのでは? ウィンドウクラス登録、ウィンドウ作成、メッセージループ、ウィンドウプロシージャは全て不要な気がしますが。

WINAPI WinMain(HINSTANCE hI,HINSTANCE,LPSTR,int nCS)
{
  //処理内容

  return 0;
}

Q古いインターフォンからの買い替え

現在東芝インターフォンHTU-1PU 9109E
というインターフォンがついています。

外のインターフォンを押すとかすかにピンポーンと音がなりますが、
家のなかでは全く音がなりません。

20年以上ついているのでこの機会にカメラ付きのインターフォンに変え変えたいと思い
家の中の受話器を開けてみました。

最近のインターフォンの仕様とは違うようなのですが、
このようなタイプのインターフォンは自分でアイフォンなどのカメラ付きインターフォンに取り換えができるのでしょうか?

動画などで簡単に2本のコードだけを付け替えて、というものを見たのですが、
開けてみたらちょっと違いました。

画像をつけますのでおわかりのかた教えていただけますか?
よろしくお願いいたします。

Aベストアンサー

信号線が2本あればカメラ付きのインターフォンにできます。
画像ではよくわかりませんが複数あるならその内の2本だけ使えばいいです。
白と黒の太い線はAC100Vです。電気工事士の資格なしにこれを取り外すのは違法です。

Qint main()、void main()、void main(void)、int main(void)

今日、大学でC言語の講義の時間、先生が、

#include <stdio.h>

void main(void){

}

と宣言してプログラムを書くと教えていました。
main関数には、
main()
void main()
void main( void )
int main()
int main( void )

と、人によりいくつかの描き方があったりします。
どれが本当は正しいのでしょうか?
void mainはすべきではないとなんかの本で読んだのですが・・。

Aベストアンサー

通称C89という以前の言語規格(現行コンパイラの多くが準拠)では、下記のいずれかが正しい。
int main(int argc, char *argv[])
int main(void)

但し、最新のC言語規格(通称C99)では、
<ISO/IEC9899:1999>
or in some other implementation-defined manner.
</ISO/IEC9899:1999>
となっているので、処理系が戻り値のvoidを認めていればvoidも可。
# 組込み系などで戻り値を使わない環境もあるためでしょうか。

なので、コンパイラのマニュアルで戻り値のvoidにしていい/しろと書いてない限り、
voidは言語仕様的には正しくない。(でも動くものもある)

Qインターフォンの親機と子機(住宅用)

住宅のインターフォンについて質問です。

現在、TAMRAというメーカーのインターフォン受話器が、自宅の1階と2階にあります。
2階のインターフォンの受話器が壊れてしまい、2階では、来客のインターフォンの音が聞こえない状態です。中古で、他メーカーのインターフォン子機の購入を考えているのですが、配線?をつなげれば音はなるのでしょうか?なにかよい対処法をご存知でしたら、教えてください。

Aベストアンサー

>中古で、他メーカーのインターフォン子機の購入を考えているのですが、配線?をつなげれば音はなるのでしょうか?
●無理です。インターフェースが合致しませんから。
同じメーカーでも機種違いでダメなケースが多いです。
セットで取り替えされることをお勧めします。

Qブロックで };ついているのと }だけの差はなんでしょうか

皆様こんにちは^^
 さて、以下のプログラムの{}ブロックで質問があります。
 {ブロック+セミコロン};と{セミコロンなし}があります。
 };で最後にセミコロン;がついていますが!これは何の意味があるのでしょうか!?
 1時間ぐらい調べましたが、該当する項目がありませんでした。
 よろしくお願いいたします。
#include <stdio.h>
#include <string.h>

/* 学生の人数 */
#define GAKUSEI_NUM 3

/* 構造体の定義 */
struct TestKekka
{
char shimei[80];
int kokugo;
int sugaku;
int eigo;
};
int main(int argc, char* argv[])
{
int i,heikin;
/* 構造体の配列の宣言 */
struct TestKekka gakusei[GAKUSEI_NUM];

/* 学生のデータ入力する */
for (i = 0; i < GAKUSEI_NUM; i++)
{
printf("氏名:");
scanf("%s", &gakusei[i].shimei);
printf("国語の得点:");
scanf("%d", &gakusei[i].kokugo);
printf("数学の得点:");
scanf("%d", &gakusei[i].sugaku);
printf("英語の得点:");
scanf("%d", &gakusei[i].eigo);
printf("---------------\n");
}

/* 学生ごとの平均点を表示する */
for (i = 0; i < GAKUSEI_NUM; i++)
{
heikin = (gakusei[i].kokugo + gakusei[i].sugaku + gakusei[i].eigo)/ 3;
printf("%sの平均点%d\n", gakusei[i].shimei, heikin);
printf("----------------\n");
}

return 0;
}

皆様こんにちは^^
 さて、以下のプログラムの{}ブロックで質問があります。
 {ブロック+セミコロン};と{セミコロンなし}があります。
 };で最後にセミコロン;がついていますが!これは何の意味があるのでしょうか!?
 1時間ぐらい調べましたが、該当する項目がありませんでした。
 よろしくお願いいたします。
#include <stdio.h>
#include <string.h>

/* 学生の人数 */
#define GAKUSEI_NUM 3

/* 構造体の定義 */
struct TestKekka
{
char shimei[80];
int kokugo;
int sugaku;
...続きを読む

Aベストアンサー

for文、関数の{}はそれで完結しているので文法上 ; は必要ありません。
構造体 struct の {}は、 } の後に変数名(もしくは別名)を書くことも可能なので、終端を示す ; が必要になります。

いずれも、C言語の文法で定義されています。

struct TestKekka
{
 char shimei[80];
 int kokugo;
 int sugaku;
 int eigo;
};



struct TestKekka
{
 char shimei[80];
 int kokugo;
 int sugaku;
 int eigo;
} testkekka; ← 変数名

もしくは、

typedef struct TestKekka
{
 char shimei[80];
 int kokugo;
 int sugaku;
 int eigo;
} TESTKEKKA; ← 別名

など。

QMPVのターボはインタークーラー付き?

店でMPVのエンジンルームを見ていたら、エンジン上部にインタークーラーみたいのがありましたが、カタログを見てみると、「インタークーラー」の表示が無く、「DIGIターボ」としか表示がありません。
あれはインタークーラーではないのでしょうか。
直噴だけでインタークーラーほど冷えるものでしょうか?
知っている方が居たら教えてください。

Aベストアンサー

回答としては、すでに出ているようにインタークーラー(IC)付です。

では、なぜICを標記しないのか推測してみると
ターボなど過給機のICは、今やアタリマエ的でセールスポイントにならないというべき。
それ以上に直噴ターボをウリにしたく(差別化)新しい表記「DISIターボ」としているのでしょう。
Direct Injection Spark Ignition ←意味不明ですが・・・。

さらにマツダは
現在V6エンジン生産していません(近々V6-3.5L予定有?)から、直4のマイナスイメージを払拭する高付加価値が必要だと。
(もっとも直噴ターボは、ディーゼルでは高圧直噴式≒コモンレール式直噴と併せアタリマエですが)

>店でMPVのエンジンルームを見ていたら、~あれはインタークーラーではないのでしょうか。
◎お店で聞くべきでしたね。

>直噴だけでインタークーラーほど冷えるものでしょうか?
◎若干補足必要でしょう。
【直噴の効果】
直噴で冷えるとの意味は、シリンダー内に直接ガソリンを噴射(空気とガソリンを混ぜた混合気ではない)するので、直接吹き込まれたガソリンでシリンダー内部が冷えやすい。
従って、ターボでありながら高圧縮比(9.5)実現できた。
その結果として、ターボラグのない(少ない)自然吸気エンジン(NA)に近いアクセルレスポンスが得られたと。
直噴ではないターボは、吸気温が高まるので燃焼温度が高くなり異常燃焼によるノッキングが起きやすく、エンジンが壊れるなどトラブル発生し勝ちなため、圧縮比を下げざるを得ません(7.5など)。

【ICの役割】
ターボは、排気ガスで回されたタービンで吸入空気を圧縮するので吸入空気量が増え、より排気量の大きいエンジンと同等パワーを得られるわけです。
しかし、空気を圧縮すると熱が発生します。
熱が発生すると、空気は熱膨張します。
そうすると、圧縮してもその分が相殺され効率低下します。
そこで、ICで冷却すれば圧縮効率が高まるわけで、これがICの主な効果です。
もちろん、温度低下による効能はそれだけではなく、直噴の場合と同じくシリンダー内温度低下ももたらしますが、それは副次的なものと言うべきです。

上記のことから、直噴とICの相乗効果があるものと考えられます。

「DIターボwithIC」としたほうがカッコイイとも思いますが・・・。

MPVのNAモデルは、直噴ではなく通常の吸気システムで
163PSと21.4kgmです。
一方、直噴ターボの「DISI」ターボは
245PSと35.7kgmです。
50%以上ものパワーアップを果たし、NAのV6-3.5L同等のスペックです。
しかし、一般的に同じエンジンをターボ化すれば50%パワーアップは当り前ですから
直噴化のメリットは、余裕を持たせることにより得られるドライバビリティーと燃費へ振ったと思えます。

例えば、V6-3.5Lと直4「DISIターボ」2.3Lのどちらに魅力を感じるかは個人的な判断ですが
多気筒大排気量化と対抗するための武器=「DISIターボ」というわけの分からない記号が必要であったのだと・・・。

以上、いち車好き評論でした。

回答としては、すでに出ているようにインタークーラー(IC)付です。

では、なぜICを標記しないのか推測してみると
ターボなど過給機のICは、今やアタリマエ的でセールスポイントにならないというべき。
それ以上に直噴ターボをウリにしたく(差別化)新しい表記「DISIターボ」としているのでしょう。
Direct Injection Spark Ignition ←意味不明ですが・・・。

さらにマツダは
現在V6エンジン生産していません(近々V6-3.5L予定有?)から、直4のマイナスイメージを払拭する高付加価値が必要だと。
(もっと...続きを読む

Q新たな疑問 for( ; ; ){

 ループプログラムでfor( ; ; ){ の; ;てどんなループですか?
以下参考にされてください。
練習問題 5-18
数値を繰り返して入力し、0が入力されたら入力を止め、それまでの合計を表示するプログラムを作成しなさい。
________________________________________
int sum = 0;
int value;

for( ; ; ){
scanf( "%d", &value );

if( value == 0 )
break;

sum += value;
}

printf( "合計は%d", sum );

Aベストアンサー

・for文では初期値の設定を行わない
・for文ではループを終了する条件を指定しない
・for文ではループのたびに実行する付加実行式を指定しない

ということだと思いますが・・・。

あくまでも ”for文では” 行わないということで。


人気Q&Aランキング