我有一些旧的代码似乎无法在64位Windows 7上工作。没有尝试32位Windows 7,但绝对适用于32位XP。较旧的代码无法获得DLL的句柄
代码最初是从这篇文章http://www.codeproject.com/KB/cs/DynamicInvokeCSharp.aspx
我读过this question其中指出,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);
任何人都可以扔在为什么它可能无法正常工作任何光线,或者我应该不是做?
得到一个稍微有用例外尝试编译和运行应用程序在64位机器上以32位模式运行。这只是一个猜测;但我认为有一个问题P /从64位.net应用程序调用32位DLL。 – Alxandr 2012-03-28 10:06:55
@Alxandr谢谢,我忘了提及所有项目的程序集都已经在x86上。 – weston 2012-03-28 10:09:55
这可能是一个尝试从x64程序或缺少的DLL加载x86 dll的问题,但尝试向您的'DllImport'语句添加'SetLastError = true',然后调用'Marshal.GetLastWin32Error()'以从'LoadLibrary' – jeffora 2012-03-28 10:10:03