函数不能在DLL中返回正确的值

这太令人沮丧了! 我不知道为什么会这样。 我有一个名为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正在正确连接,因为编译器不抱怨缺lessfunction“五”。 另外,当我把打印语句放在DLL代码中时,它们显示正常。 我做错了什么?

只是一个疯狂的猜测:

你似乎没有在weirdTest.c中声明five()的原型,这就是为什么编译器将该函数的返回类型视为int。 从int到double的结果转换混淆了你原来的double值。

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

并查看是否导出了五()