|
回帖奖励 +20
第一个问题:
Windows加载C#的exe时,就会加载所有使用到的dll(父)及dll(子)
加载时,不区分父子。因此,他们的加载规则是一样的。
第二个问题:
周振红教材里说的加载顺序并不完整。
其中缺少了 WinSxS , .Net framework , KnownDLLs 等(当然这些不太重要)
这个顺序是加载DLL的顺序(不区分父子,参考第一个问题)
第三个问题:
fortcom 是 IVF 的一部分,它遇到了权限问题。
这个比较难说,你可以试试用管理员身份运行VS。如果依然有问题,可能是磁盘错误,导致IVF目录的NTFS权限信息丢失。尝试一下 chkdsk /f
(这几乎不是fortran问题)
第四个问题:
会不会自动把所需的dll打包,取决于你的打包方式。
windows installer ? 还是 Wise ?InstallShielden?或者 NSIS ?
一般来说,需要自己写脚本(或配置)哪些文件需要打包。
推荐的方式是把所有所需的DLL(不区分父子)全部打包给用户。
实际上,你可以在很多常用的软件目录里找到很多编译器的运行时库,例如 borlandmm.dll msvcrt.dll 等等
第五个问题:
你说的导出dll是什么意思?
编译器在编译时,并不会检查所需的dll是否存在,只有运行时由windows检查。
depends(或同类软件)可以检查出来静态依赖的DLL(对于动态依赖的DLL也无法检查)
这不算是bug
MKL的一部分DLL就属于动态依赖的(由Loadlibrary动态加载)
第六个问题:
导入库一般VC++才需要。fortran也可以用导入库。
这与dll的使用者有关(而不是dll的提供者)
事实上,没有导入库也没关系~~只要知道函数的接口(函数的定义),完全可以自己写一个只有接口,但没有内部实现的代码,编译之后,得到的导入库,与真实的导入库一样。
c# 的 DLLImport 实际上完成的,也是导入库的作用:“即:告知编译器函数的定义”
c#是托管代码,所有DLL都是动态加载的。 |
|