相关疑难解决方法(0)

P/Invoke动态DLL搜索路径

我有一个现有的应用程序P/Invokes到一个DLL与应用程序本身驻留在同一目录中.

现在(由于佳能生产了最疯狂的API之一)我需要支持这个API的两个版本,并在运行时确定我应该使用哪个(旧的或新的).由于DLL具有相同的名称(第一个加载具有相同名称的其他DLL,因此只重命名第一个将无法帮助我)我必须将它们保存在不同的目录中.

因此我的问题是:我有什么选择来控制DllImport声明中给出的DLL使用的目录?

我想我可以尝试以下两个想法中的任何一个:

1)在执行第一个P/Invoke之前使用"SetDllDirectory"设置我想要的目录,然后重置它.

2)使用"LoadLibraryEx"手动加载所需的DLL,并希望这样做.

但是,有没有更多的".NET:ish方式"首先尝试?

更新:我意识到我可以在两个单独的.Net程序集中填充对DLL的所有访问权限,然后将它们中的每一个放在一个带有相应API文件的单独目录中.然后我可以动态加载正确的.Net程序集,并自动加载正确的DLL.有什么理由不行吗?

我能想到一个:我将如何调试这些东西?有可能告诉Visual Studio一个程序集(包含在我的解决方案中)应该放在一个子目录中并从那里进行调试吗?

.net c# pinvoke dllimport

13
推荐指数
1
解决办法
5147
查看次数

标签 统计

.net ×1

c# ×1

dllimport ×1

pinvoke ×1