yswwnmjk 发表于 2015-2-5 00:11:59

新人求助,IVF怎么调用C++编好的dll文件?

第一次接触dll文件,里面放了一个函数,比如abc()。
用项目-添加现有文件 把这个dll文件添加好了以后,写了一个测试程序还是找不到这个函数abc。
使用的是call abc()语句,提示出错找不到abc函数,是不是我的测试主程序不能这样写?
同学用python与C++都能成功调出这个abc函数!但他对fortran不熟,请问论坛的各位大大,用ivf该如何调用该dll中的abc函数?如何操作,如何调用?

vvt 发表于 2015-2-5 08:49:59

1.通常 C++ 的 DLL 不容易调用。而 C 的 DLL 更容易一些。或者你的 C++ 使用 C 语言接口导出函数。
2.调用 DLL 有两种方式:隐式调用和显式调用。前者需要使用 LoadLibrary 和 GetProcAddress 两个函数找到 DLL 的函数入口。后者需要添加 lib 文件到工程中。

yswwnmjk 发表于 2015-2-5 09:53:48

vvt 发表于 2015-2-5 08:49
1.通常 C++ 的 DLL 不容易调用。而 C 的 DLL 更容易一些。或者你的 C++ 使用 C 语言接口导出函数。
2.调用...

谢谢您了,我去试试!

yswwnmjk 发表于 2015-2-5 14:27:06

本帖最后由 yswwnmjk 于 2015-2-5 16:15 编辑

vvt 发表于 2015-2-5 08:49
1.通常 C++ 的 DLL 不容易调用。而 C 的 DLL 更容易一些。或者你的 C++ 使用 C 语言接口导出函数。
2.调用...
您好!这是我自己写的一个简单的dll文件
subroutine abc()
!DEC$ ATTRIBUTES DLLEXPORT :: SUB
implicit none
write(*,*) "Subroutine in DLL"
return
end
然后把它编译为了dll文件
这是我的测试文件:
program UseTest
implicit none
call abc()
Pause
end
在Project-添加现有项把dll文件添加到了目录下,但编译时IVF提示如下:
Error    1   error LNK2019: unresolved external symbol _ABC referenced in function _MAIN__    UseTest.obj   
Error    2   fatal error LNK1120: 1 unresolved externals    Debug\UseTest.exe   
而假如我把上面编译为lib,而不是编译成dll再添加,就可以正常通过了测试了。。。。
看了彭国伦的书,上面说的挺简单的。
谢谢您的指教!

yswwnmjk 发表于 2015-2-5 14:44:57

vvt 发表于 2015-2-5 08:49
1.通常 C++ 的 DLL 不容易调用。而 C 的 DLL 更容易一些。或者你的 C++ 使用 C 语言接口导出函数。
2.调用...

同时问下,怎么调用C++函数,有什么教程吗?
我有C++源代码,可是我不太懂C++。
并且已经用fortran写了许多代码了,现在需要调用下C++编写好的这个函数。
int srimp(double fo, double te, double tc, double fak, double dlon, double xkoh, double frei, double *mx)
这是C++我要调用的函数。
谢谢您!

fcode 发表于 2015-2-5 15:42:12

! DEC$ ATTRIBUTES DLLEXPORT :: SUB

改为

! DEC$ ATTRIBUTES DLLEXPORT :: abc

由于混编与具体操作环境(编译器,IDE)等的关联性很大,不同的环境,具体操作就不同。所以没有统一的教材可供参考。

yswwnmjk 发表于 2015-2-5 15:57:30

fcode 发表于 2015-2-5 15:42
! DEC$ ATTRIBUTES DLLEXPORT :: SUB

改为


谢谢,不过改了后还是报错,错误如以前还是一样的!

fcode 发表于 2015-2-5 15:59:33

请把 DLL 编译后的 lib 文件添加到使用DLL的工程里。

yswwnmjk 发表于 2015-2-5 16:07:39

本帖最后由 yswwnmjk 于 2015-2-5 16:08 编辑

fcode 发表于 2015-2-5 15:59
请把 DLL 编译后的 lib 文件添加到使用DLL的工程里。
好的,谢谢!

yswwnmjk 发表于 2015-2-5 16:10:46

本帖最后由 yswwnmjk 于 2015-2-5 16:21 编辑

fcode 发表于 2015-2-5 15:59
请把 DLL 编译后的 lib 文件添加到使用DLL的工程里。
这样的确成功了,为什么不用lib不行呢?

同时把添加的dll删去,调试成功,但删除lib就提示调试出现错误。

同时我按照其它地方看到的调用dll文件的方法,刚刚还去修改了linker下的general与input选项。发现它出错提示又不一样了!

页: [1] 2
查看完整版本: 新人求助,IVF怎么调用C++编好的dll文件?