c#编程语言,win7下使用Kernel32的LoadLibrary方法载入DLL失败,如何解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#编程语言,win7下使用Kernel32的LoadLibrary方法载入DLL失败,如何解决?相关的知识,希望对你有一定的参考价值。

C# (C sharp)编程语言。
在win xp 下,使用下面的方法 LoadLibrary 可以载入DLL(动态链接库),返回的值非0 。非0表示成功载入。
在win 7 下,为什么相同的代码,相同的DLL,返回值是0。0表示载入失败。
[DllImport("Kernel32")]
public static extern int LoadLibrary(String funcname);

是不是win xp 系统和win 7 系统载入的过程不同,导致结果不同?
回答重点,怎么解决在win 7 下使用该方法载入该dll 。
补充:
win xp 下,C#写的程序能正常运行。
win 7 下,该程序无法正常运行,即使使用管理员权限运行也是一样的结果。
而无法运行的原因就是载入DLL失败。

该方法的详细说明:
/// <summary>
/// 载入指定的动态链接库,并将它映射到当前进程使用的地址空间。
/// 一旦载入,即可访问库内保存的资源
/// </summary>
/// <param name="funcname">指定要载入的动态链接库的名称</param>
/// <returns>成功则返回库模块的句柄,零表示失败</returns>
[DllImport("Kernel32")]
public static extern int LoadLibrary(String funcname);

参考技术A [DllImportAttribute("kernel32.dll", EntryPoint = "ReadProcessMemory")]
public static extern bool ReadProcessMemory
(
IntPtr hProcess,
IntPtr lpBaseAddress,
IntPtr lpBuffer,
int nSize,
IntPtr lpNumberOfBytesRead
);
这是我用的读写内存的一个例子追问

DLL还没有成功载入到内存中,也就没有返回句柄,就不能使用你写的方法进行读取。

追答

这个会自动去载入dll的

追问

我的代码这样写,
int hModule = 0;
hModule = DLLWrapper.LoadLibrary("DelphiDLL1.dll");
if (hModule == 0)

//载入失败

载入的是放在程序目录里的“DelphiDLL1.dll”文件。
怎么修改为你所说的"ReadProcessMemory”方法?

参考技术B 是不是权限级别不够,以管理员身份运行你的程序试试!追问

用管理员身份运行,程序也是无法正常运行。

追答

你用依赖项查看工具看一下,DelphiDLL1.dll是不是在Windows7下缺少依赖项。

以上是关于c#编程语言,win7下使用Kernel32的LoadLibrary方法载入DLL失败,如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

用于 kernel32.dll API 的包装器 C#

win7下delphi7编译时提示: Debugger Kernel BORDBK70.DLL is missing or not registered.

从 C# 调用时,是不是可以获得 Kernel32.dll 函数的最后一个错误代码?

无法定位程序输入点于动态链接库kernel32.dll上

什么是win32编程

解决Qt发布的程序在xp环境下提示“无法定位程序输入点 K32GetModuleFileNameExA 于动态链接库 KERNEL32.dll 上”的错误