我正在开发一个用 C# 编写的 .NET 4.0 项目(通过 Visual Studio 2010)。有一个需要使用 C/C++ DLL 的第 3 方工具,并且有 C# 中的 32 位应用程序和 64 位应用程序的示例。
问题是 32 位演示静态链接到 32 位 DLL,而 64 位演示静态链接到 64 位 DLL。作为一个 .NET 应用程序,它可以作为 32 位或 64 位进程在客户端 PC 上运行。
.NET 4.0 框架提供了Environment.Is64BitProcess 属性,如果应用程序作为64 位进程运行,该属性将返回true。
我想做的是在检查 Is64BitProcess 属性后动态加载正确的 DLL。然而,当我研究动态加载库时,我总是会想到以下内容:
[DllImport("kernel32.dll")]
public static extern IntPtr LoadLibrary(string dllToLoad);
[DllImport("kernel32.dll")]
public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);
[DllImport("kernel32.dll")]
public static extern bool FreeLibrary(IntPtr hModule);
Run Code Online (Sandbox Code Playgroud)
看来这些方法是专门针对 32 位操作系统的。有 64 位等效项吗?
只要基于 Is64BitProcess 检查调用适当的方法,静态链接 32 …