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

前端之家收集整理的这篇文章主要介绍了多次加载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相关文章