gpt4 book ai didi

c# - 从具有非静态路径的 DLL 调用函数

转载 作者:太空宇宙 更新时间:2023-11-03 22:27:35 25 4
gpt4 key购买 nike

我有一个 DLL,我需要从中访问方法。

在像这样的大多数情况下,我只是使用 [DllImport] 从非托管程序集访问方法,但在这种情况下的问题是它在实例化时需要 DLL 的路径,因此需要一个常量字符串。

这个特定的 DLL 是随我的应用程序一起安装的,我不能保证它在程序安装后的位置(我宁愿不把它放在静态的地方,比如 %SystemRoot%)。

那么在 C# 中有没有一种方法可以在运行时使用可变路径声明和使用 DLL 中的方法?

如有任何想法或建议,我们将不胜感激!

最佳答案

这有点 hack,但既然你说你可以在运行时找到 dll 的路径,为什么不在使用任何函数之前将它复制到你当前的工作目录?这样,dll 将存在于您的 exe 旁边,并且将由 LoadLibrary 找到。无需在 DllImport 中添加任何其他路径。

从动态路径使用方法的唯一其他方法是:
1) 为 LoadLibrary 做必要的 P/Invoke 签名& GetProcAddress
2) 从所需路径加载库(LoadLibrary)
3) 找到想要的函数(GetProcAddress)
4) 将指针指向委托(delegate) Marshal.GetDelegateForFunctionPointer
5) 调用它。

当然,您需要为要以这种方式“导入”的每个函数声明一个委托(delegate),因为您必须将指针转换为委托(delegate)。

关于c# - 从具有非静态路径的 DLL 调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/738555/

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