C# 下面的代码是否意味着这些方法的实现只作为DLL提供,而没有C源代码?

C# 下面的代码是否意味着这些方法的实现只作为DLL提供,而没有C源代码?,c#,.net,http,C#,.net,Http,在我正在阅读的C代码中,有对WinHttpConnect和其他方法的调用 我猜它们是基于System.Net中.Net Framework类库中的方法实现的,例如WebClient、WebRequest、WebResponse或HttpClient。我想验证我的猜测,所以使用VisualStudio2015 IDE查找它们的定义和实现位置。但我没有找到这些方法的实现位置,但最后在.cs文件中找到了以下代码 以下代码是否暗示 方法仅作为DLL提供,没有C源代码? 这些方法是否来自某些库 有关于这个

在我正在阅读的C代码中,有对WinHttpConnect和其他方法的调用

我猜它们是基于System.Net中.Net Framework类库中的方法实现的,例如WebClient、WebRequest、WebResponse或HttpClient。我想验证我的猜测,所以使用VisualStudio2015 IDE查找它们的定义和实现位置。但我没有找到这些方法的实现位置,但最后在.cs文件中找到了以下代码

以下代码是否暗示 方法仅作为DLL提供,没有C源代码? 这些方法是否来自某些库

有关于这个的文件吗 这些方法的使用情况如何

这些库也是用C写的吗

对于程序员来说,哪个更适合使用,方法来自的库,还是System.Net下的.Net Framework类库

谢谢

private class NativeMethods
{


    #region Private Constants
    private const string DllName = "WinHttp";
    #endregion

    #region Native Windows Class
    private static class NativeApi
    {
        [DllImport(DllName, SetLastError = true, CharSet = CharSet.Auto, EntryPoint = "WinHttpAddRequestHeaders", CallingConvention = CallingConvention.StdCall)]
        public static extern bool WinHttpAddRequestHeaders(IntPtr requestHandle, string headers, int headersLength, uint modifiers);

        [DllImport(DllName, SetLastError = true, CharSet = CharSet.Auto, EntryPoint = "WinHttpCloseHandle", CallingConvention = CallingConvention.StdCall)]
        public static extern bool WinHttpCloseHandle(IntPtr internetHandle);

        [DllImport(DllName, SetLastError = true, CharSet = CharSet.Auto, EntryPoint = "WinHttpConnect", CallingConvention = CallingConvention.StdCall)]
        public static extern IntPtr WinHttpConnect(IntPtr sessionHandle, string serverName, ushort serverPort, uint reserved);

        ...
    }

    ...
}
是C中的一个特殊属性,它定义了在非托管DLL文件中实现的C中要使用的函数

在这种情况下,DLL文件称为winhttp.DLL,您可以在C:\Windows\System32文件夹中找到它。这个DLL文件是一个非托管DLL文件,意思是它是用一个本地的、非.NET语言编写的,比如用Windows操作系统发送的C或C++。 您可以找到关于和的文档

如果您正在用.NET语言编写程序,并且有可用的.NET包装器,那么最好使用这些包装器。如果您需要调用的函数没有.NET包装,那么您必须使用DllImport将函数导入C。然后您可以编写自己的.NET包装,这基本上就是Microsoft使用这3个函数所做的

此外,如果您需要在应用程序中使用非托管DLL,但不确定如何声明[DllImport]属性,则有一个名为的网站,其中列出了许多常见的非托管DLL文件,并为您提供了正确的[DllImport]方法

由于WinHttp.Dll是Windows操作系统的一部分,并且Windows源代码是专有的,所以您可能无法找到它的源代码。然而,如果你真的想了解它是如何工作的,那么有一个Linux程序可以让Linux运行Windows应用程序。它通过模拟底层系统DLL文件来实现这一点。Wine是开源的,您可以查看其源代码。请记住,这不是Microsoft代码,Wine可能会实现稍微不同的DLL。但它应该能让你了解发生了什么