P/调用具有运行时文件名的本机 DLL

本文关键字:文件名 本机 DLL 运行时 调用 | 更新日期: 2023-09-27 18:32:47

出于版本控制的原因,能够在文件名将在运行时确定的本机C++ dll上使用p/invoke对我来说是有益的,如下所示:

[DllImport(myDllFilename)]
private static extern void MyInvokedMethod();

不幸的是,[DllImport]是一个属性,需要一个常量表达式。还有其他选择可以解决此错误吗?

我知道我可以在不同的文件夹中使用名称相同的文件并在运行时加载正确的文件,但是能够使用不同名称的文件对于我的情况来说是理想的。

P/调用具有运行时文件名的本机 DLL

没有解决方法。您将需要使用 LoadLibrary 和 GetProcAddress。这真的一点也不好玩,所以如果可行的话,我会尽量避免这样做。

要实现你想要的,你需要调用几件事(LoadLibraryGetProcAddress - 见下面的链接)...它被称为"后期绑定本机代码"...使用它并不容易/推荐,但有可能...

一些带有解释、示例和源代码的相关链接:

  • http://blogs.msdn.com/b/junfeng/archive/2004/07/14/181932.aspx
  • http://www.codeproject.com/KB/cs/dyninvok.aspx
  • http://pinvoke.net/default.aspx/kernel32/GetPRocAddress.html
  • http://www.pinvoke.net/default.aspx/kernel32.loadlibrary