C#代码无法访问

C#代码无法访问,c#,C#,我正在制作这个dll加载程序。我似乎无法让它返回错误的陈述 只是评论一下你是如何修复的,这样我就能理解你修复它的方式了 它一直在说:代码是不可访问的 它在else语句中说明了这一点 internal static class NativeMethods { [DllImport("kernel32.dll")] public static extern IntPtr LoadLibrary(string dllToLoad); [DllImport("kernel32.

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

问题在于
IntPtr
是一种值类型,而不是引用,因此不能为null。如果要检查指针是否从未设置过(意味着操作失败),则应检查指针是否为零

ptr == IntPtr.Zero

我怀疑
var pDll=NativeMethods.LoadLibrary(dllname)
正在返回不可为空的对象,例如
struct
。因此,它永远不能为空


您可能希望检查它是否不是默认值(可能是…

pDll!=null始终为True,这就是代码无法访问的原因。
它不能为False,因为如果没有加载pDll==IntPtr.Zero

else{Console.WriteLine(@“FAILED!”);}system(“pause”);无法在多行上获取编译器警告。另外,什么数据类型是pDll?它是类还是结构?你的代码发布后,我无法重现这个问题。请记住,结构必须有一个值,因此它永远不能为null。结构不能为null。为了便于将来参考,如果您对自己的问题找到了答案,正确的做法是将其作为答案发布。不要用修正或说“已解决”来编辑你的问题-我们知道问题已经得到回答的方式是如果有一个可接受的答案-具体来说,如果你选择,这是允许你自己的。成功了非常感谢你的人的帮助:)