У меня есть какой-то старый код, который не работает на 64-битной Windows 7. Не пробовал 32-битную Windows 7, но определенно работает на 32-битной XP.
Код был первоначально получен из этой статьи http://www.codeproject.com/KB/cs/DynamicInvokeCSharp.aspx
Я прочитал этот вопрос , в котором говорится, что kernel32.dll все еще существует.
[DllImport("kernel32.dll", EntryPoint = "LoadLibrary")]
private static extern int LoadLibrary([MarshalAs(UnmanagedType.LPStr)] string lpLibFileName);
[DllImport("kernel32.dll", EntryPoint = "GetProcAddress")]
private static extern IntPtr GetProcAddress(int hModule, [MarshalAs(UnmanagedType.LPStr)] string lpProcName);
[DllImport("kernel32.dll", EntryPoint = "FreeLibrary")]
private static extern bool FreeLibrary(int hModule);
[DllImport("kernel32.dll")]
private static extern bool SetDllDirectory([M
arshalAs (UnmanagedType.LPStr)] string lpPathName);
И вот как это используется:
public void Init(string dllName)
{
DllName = dllName;
SetDllDirectory(Path.GetDirectoryName(dllName));
hModule = LoadLibrary(Path.GetFileName(dllName));
if (hModule == 0)
throw new Exception("Cannot load dll " + dllName);
}
Проблема, которую я получаю, заключается в том, что LoadLibrary
всегда возвращает 0
для ручки.
Я тоже пробовал hModule = LoadLibrary(dllName);
Может ли кто-нибудь пролить свет на то, почему это может не сработать, или что я должен делать вместо этого?