我正在制作这个dll加载器。我似乎无法回复虚假陈述。
只需修改一下我修复它的方法,以便了解修复方法吗?
它一直说:代码无法访问。
它在else语句中说出来
internal static class NativeMethods
{
[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);
}
internal class Program
{
[DllImport("msvcrt.dll")]
static extern bool system(string str);
private static void Main()
{
Console.Title = "Load DLL Test";
Console.ForegroundColor = ConsoleColor.Cyan;
Console.Write("CREATED BY TOXLP\n");
Console.WriteLine("PLEASE TYPE A DLL NAME");
Console.WriteLine("======================");
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("EXAMPLE:");
Console.WriteLine("NAME.DLL");
Console.WriteLine("======================");
Console.ForegroundColor = ConsoleColor.Green;
var dllname = Console.ReadLine();
var pDll = NativeMethods.LoadLibrary(dllname);
if (pDll != null)
{
Console.WriteLine(@"LOADED!");
}
else
{
Console.WriteLine(@"FAILED!");
}
system("pause");
}
}
答案 0 :(得分:3)
问题是IntPtr
是值类型,而不是引用,因此它不能为null。如果你想检查指针是否从未被设置(意味着操作失败了)你应该检查指针是否为零
ptr == IntPtr.Zero
答案 1 :(得分:0)
我怀疑var pDll = NativeMethods.LoadLibrary(dllname);
正在返回一个不可为空的对象,例如一个struct
。因此它永远不会为空。
您可能想要检查它不是default
(可能 ...)
答案 2 :(得分:0)
pDll!= null始终为True,这就是代码无法访问的原因。 它不能是假的,'cos如果没有加载pDll == IntPtr.Zero