这些线是什么意思?

时间:2013-04-02 01:19:03

标签: c#

对于这个非常模糊的问题感到抱歉,但我不确定如何谷歌/问这个问题。

基本上,我在很多c#代码中看到了这两条(类似的)行:

[DllImport("user32.dll")]

Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");

在第一个片段中,它实际上在做什么。 [ ]用于什么?

在第二个片段中,调用的<string>声明是什么,以便我可以找到更多相关信息。

谢谢!

2 个答案:

答案 0 :(得分:4)

[DllImport("user32.dll")]

  • DllImport属性允许您指定包含该方法的DLL的名称。通常的做法是将C#方法命名为与导出方法相同,但您也可以为C#方法使用不同的名称。

请参阅Platform Invoke Tutorial

Task<string> - 请参阅Generics

答案 1 :(得分:0)

  

喜欢[DllImport(“msvcrt.dll”)]?

C#代码可以通过两种方式直接调用非托管代码:

1. 直接调用从DLL导出的函数。

2.在COM对象上调用接口方法(有关此内容的更多信息,您还没有问过!,请参阅COM Interop Part  C#客户端教程)。

  

简单DllImportdllexport启用与DLL文件的互操作。我们   可以使用C ++ DLL动态链接库,或自定义遗留DLL - 甚至   一个我们不能重写,但有能力修改。

最好的导师:http://www.dotnetperls.com/dllimport

  

直接从C#调用DLL导出
  要将方法声明为具有DLL导出的实现,请执行以下操作:   使用static和extern C#关键字声明方法。   将DllImport属性附加到方法。 DllImport属性允许您指定包含的DLL的名称   方法。通常的做法是将C#方法命名为   导出方法,但您也可以为C#方法使用不同的名称。   (可选)为方法的参数和返回值指定自定义封送处理信息,这将覆盖.NET   框架默认编组。

示例1

This example shows you how to use the DllImport attribute to output a message by calling puts from msvcrt.dll.

// PInvokeTest.cs
using System;
using System.Runtime.InteropServices;

class PlatformInvokeTest
{
    [DllImport("msvcrt.dll")]
    public static extern int puts(string c);
    [DllImport("msvcrt.dll")]
    internal static extern int _flushall();

    public static void Main() 
    {
        puts("Test");
        _flushall();
    }
}
  

输出

     

测试


严格参考


http://msdn.microsoft.com/en-us/library/aa288468%28v=vs.71%29.aspx
http://www.codeproject.com/Articles/189374/The-Basics-of-Task-Parallelism-via-C
http://www.dreamincode.net/forums/topic/211613-very-basic-introduction-to-tasks/
http://www.basarat.com/2011/06/best-tutorial-of-c-async.html