これはとてもイライラです!なぜこれが起こっているのか分かりません。私はweirdDLL.cと呼ばれるファイルを持っている:DLLで正しい値を返さない関数
double five() {
return 5.0;
}
私はweirdTest.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char** argv) {
double f = five();
if (f != 5.0) {
printf("Test failed with %f", f);
return 1;
}
return 0;
}
私は期待と呼ばれる別のファイルを持ってコンパイルし、DLL、コード内でリンクされたときに、そのweirdTestはエラーなしで終了します。私はコマンドでGCC(cygwinの)を使用してのWindows 7 64ビットでコンパイルしています:
gcc -c weirdDLL.c
gcc -shared -o weirdDLL.dll weirdDLL.o
gcc -o test weirdtest.c -L./ -l weirdDLL
./test
出力は次のとおりです。
Test failed with 0.000000
ので、DLLが正しくリンクされつつあるように思えコンパイラは関数 "five"が不足していると不平を言うことはありません。また、私は、DLLコードにprintステートメントを置く、彼らは上手く表示されます。私は何を間違えたのですか?
http://stackoverflow.com/questions/9780930/correct-answer-before-return-incorrect-after-return同じ問題があります。関数 'five()'の宣言/プロトタイプが必要です。 'main()'がそれを呼び出す前に、コンパイラは 'int'を返さないことを知っています。 –
@Michael Burr:問題はありました、ありがとう! DLLは赤ちゃんだった。しかし、なぜコンパイラはintを期待していますか?関数プロトタイプはDLLコードで利用でき、戻り値もdoubleに代入しています。 – Mark