gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:20:14 24 4
gpt4 key购买 nike

我的 .Net 程序使用 fortran Dll 来执行数学函数(Arpack,解决特征模式)。我相信 fortran 包含静态变量,通常不是线程安全的。而且它非常复杂,可能需要大量的努力才能使其线程安全。 Dll 不是很大(700K),所以我只想加载它很多次(比如 4 次,或者可能 8 次)以允许线程同时工作。有人知道我该怎么做吗?我听说 LoadLibrary 在多次调用时总是返回相同的句柄。因此,就目前而言,我唯一的解决方案是在磁盘上保存我的 Dll 的多个副本(Arpack1.dll、Arpack2.dll 等)并根据需要加载它们。相当可怕。

有任何想法吗?

尤安

最佳答案

您找到的解决方法实际上是一个相当不错的解决方法。带有 LOAD_LIBRARY_AS_IMAGE_RESOURCE 选项的 LoadLibraryEx() 可能会起作用。该选项允许您多次加载它。不过我对此表示严重怀疑,DLL 几乎可以肯定依赖于通过 DllMain 初始化其运行时支持代码。

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

关于.net - 多次加载 Dll 以允许 .Net 中的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4225064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com