我有一个编译错误与C#
using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows.Forms; using System.Security.Principal; using System.Security.Permissions; using System.Runtime.ConstrainedExecution; using System.Runtime.InteropServices; using Microsoft.Win32.SafeHandles; [DllImport("advapi32.dll", SetLastError = true,CharSet = CharSet.Unicode)] public static extern bool ***LogonUser***(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out ***SafeTokenHandle*** phToken);
在*符号(LogonUser的和SafeTokenHandle)字。 我的C#编译器由于未知types而无法编译。 我用visual studio 2012,windows 64,framework 4.0开发。
请帮忙。
这是因为这些结构没有在你的项目中定义。
从我所知道的你neet的方法是:
[DllImport("advapi32.dll", SetLastError=true)] public static extern bool LogonUser( string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken );
这里是对功能的解释
SafeTokenHandle
不是.NET Framework的一部分。 我假设你的代码与本文有些相关,所以你错过了定义:
public sealed class SafeTokenHandle : SafeHandleZeroOrMinusOneIsInvalid { private SafeTokenHandle() : base(true) { } [DllImport("kernel32.dll")] [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] [SuppressUnmanagedCodeSecurity] [return: MarshalAs(UnmanagedType.Bool)] private static extern bool CloseHandle(IntPtr handle); protected override bool ReleaseHandle() { return CloseHandle(handle); } }