多次加载Dll以允许.Net中的多线程

我的.Net程序使用fortran Dll来执行数学函数(Arpack,求解本征模式).我相信fortran包含静态变量,通常不是线程安全的.此外,它非常复杂,可能需要花费大量精力才能使其保持线程安全. Dll不是很大(700K)所以我只想加载它多次(比如4或8)以允许线程同时工作.任何人都知道我怎么能这样做?我听说LoadLibrary在多次调用时总会返回相同的句柄.因此,我认为唯一的解决方案是在磁盘上安装我的Dll的多个副本(Arpack1.dll,Arpack2.dll等)并根据需要加载它们.太可怕了.

有任何想法吗?

尤安

你找到的解决方法实际上是相当不错的.使用LOAD_LIBRARY_AS_IMAGE_RESOURCE选项的LoadLibraryEx()可能会有小的可能性.该选项允许您多次加载它.我严重怀疑它,DLL几乎肯定依赖于通过DllMain初始化其运行时支持代码.

我没有听到你提到的一件事是必须使用GetProcAddress()的痛苦.确保你这样做,或者当你开始线程时你仍然会踩踏全局变量.每个线程必须使用自己的地址.

相关文章

Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...
Windows文件操作基础代码 Windows下对文件进行操作使用的一段...
Winpcap基础代码 使用Winpcap进行网络数据的截获和发送都需要...
使用vbs脚本进行批量编码转换 最近需要使用SourceInsight查看...