C#代码无法访问
我正在制作这个dll加载程序。我似乎无法让它返回错误的陈述 只是评论一下你是如何修复的,这样我就能理解你修复它的方式了 它一直在说:代码是不可访问的 它在else语句中说明了这一点C#代码无法访问,c#,C#,我正在制作这个dll加载程序。我似乎无法让它返回错误的陈述 只是评论一下你是如何修复的,这样我就能理解你修复它的方式了 它一直在说:代码是不可访问的 它在else语句中说明了这一点 internal static class NativeMethods { [DllImport("kernel32.dll")] public static extern IntPtr LoadLibrary(string dllToLoad); [DllImport("kernel32.
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.Zeroelse{Console.WriteLine(@“FAILED!”);}system(“pause”);无法在多行上获取编译器警告。另外,什么数据类型是pDll?它是类还是结构?你的代码发布后,我无法重现这个问题。请记住,结构必须有一个值,因此它永远不能为null。结构不能为null。为了便于将来参考,如果您对自己的问题找到了答案,正确的做法是将其作为答案发布。不要用修正或说“已解决”来编辑你的问题-我们知道问题已经得到回答的方式是如果有一个可接受的答案-具体来说,如果你选择,这是允许你自己的。成功了非常感谢你的人的帮助:)