函数未在DLL中返回正确的值

时间:2012-03-21 08:11:43

标签: c windows gcc dll return

这太令人沮丧了!我不知道为什么会这样。我有一个名为 weirdDLL.c 的文件:

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) 64位Windows 7 上编译命令:

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语句时,它们显示正常。我做错了什么?

2 个答案:

答案 0 :(得分:5)

只是猜测:

您似乎没有在weirdTest.c中为five()声明原型,这就是编译器将该函数的返回类型视为int的原因。从int到double的结果转换会使您的原始双值变大。

答案 1 :(得分:0)

使用dumpbin(windwos)或nm(linux)列出DLL中的导出函数

并查看是否导出了five()