1
5
P/Invoke使用LoadLibrary加载DLL,如果已经有一个加载了给定名称的库,LoadLibrary将返回它。因此,如果您可以为DLL的两个版本赋予相同的名称,但将它们放在不同的目录中,那么您可以在第一次从scilexer.DLL调用函数之前执行一次类似的操作,而无需重复外部声明:
|
2
4
不幸的是,我对这个特定的DLL一无所知。但是,当您自己执行P/Invoke时,您可以处理一些重复,因此可以为每个平台创建一个代理。 例如,假设您有以下接口,该接口应通过32位或64位DLL实现:
和
由于DLL在第一次被调用时是延迟加载的,这实际上是可行的,尽管每个平台只能加载其本机版本。看见 this article 以获取更详细的解释。 |
3
2
我想到的最好的办法是:
File.Delete(Application.StartupPath + @"\scilexer.dll"); { // Check for 64 bit and copy the proper scilexer dll if (IntPtr.Size == 4) { File.Copy(Application.StartupPath + @"\scilexer32.dll", Application.StartupPath + @"\scilexer.dll"); } else { File.Copy(Application.StartupPath + @"\scilexer64.dll", Application.StartupPath + @"\scilexer.dll"); } } |
4
1
您可以将dll放入system32中。syswow64中的32位和实际system32中的64位。对于32位应用程序,当他们访问system32时,他们被重定向到Syswow64。
这是什么 powershell installer does . |
5
0
This article 应该解释它是如何工作的。 |