我将在asp.net web应用程序中使用kernel32 dll。这是代码: // DllGetClassObject函数指针签名 private delegate int DllGetClassObject(ref Guid ClassId,ref Guid InterfaceId,[Out,MarshalAs(UnmanagedType.Interface)] out object ppunk);
//Some win32 methods to load\unload dlls and get a function pointer
private class Win32NativeMethods
{
[DllImport("kernel32.dll", CharSet=CharSet.Ansi)]
public static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName);
[DllImport("kernel32.dll")]
public static extern bool FreeLibrary(IntPtr hModule);
[DllImport("kernel32.dll")]
public static extern IntPtr LoadLibrary(string lpFileName);
}
public string GetTheDllHandle (dllName)
{
IntPtr dllHandle = Win32NativeMethods.LoadLibrary(dllName); // the dllHandle=IntPtr.Zero
return dllHandle.ToString();
}
当我调用我的函数GetTheDllHandle时,dllHandle返回零的问题
那里的人有类似的东西吗?或者有人有任何建议吗?
答案 0 :(得分:10)
在加载DLL时返回0是由于几个原因,例如,DLL不在指定的路径上,或者平台不支持DLL,或者在构建本机DLL之前未加载相关的dll。因此,您可以通过为SetLastError属性
设置true来跟踪这些错误DllImport("kernel32.dll", EntryPoint = "LoadLibrary", SetLastError = true)]
public static extern IntPtr LoadLibrary(string lpFileName);
public string GetTheDllHandle (dllName)
{
IntPtr dllHandle = Win32NativeMethods.LoadLibrary(dllName); // the dllHandle=IntPtr.Zero
if (dllHandle == IntPtr.Zero)
return Marshal.GetLastWin32Error().ToString(); // Error Code while loading DLL
else
return dllHandle.ToString(); // Loading done !
}
答案 1 :(得分:0)
我在asp.net Web应用程序中遇到kernel32.dll
的相同问题。 LoadLibrary
返回空,而GetLastWin32Error()
返回 127 。
就我而言,问题是平台不支持DLL 。我在64位Windows Server上运行64位模式IIS网站。 Dll
与x64不兼容。然后,启用32位asp.net IIS集成并进行编译,以32位模式发布,此问题已解决。