前端之家收集整理的这篇文章主要介绍了
多次加载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()的痛苦.确保你这样做,或者当你开始线程时你仍然会踩踏全局变量.每个线程必须使用自己的地址.