C#代码无法访问

时间:2014-06-19 12:46:42

标签: c#

我正在制作这个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");
    }
}

3 个答案:

答案 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