对于这个非常模糊的问题感到抱歉,但我不确定如何谷歌/问这个问题。
基本上,我在很多c#代码中看到了这两条(类似的)行:
[DllImport("user32.dll")]
和
Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");
在第一个片段中,它实际上在做什么。 [ ]
用于什么?
在第二个片段中,调用的<string>
声明是什么,以便我可以找到更多相关信息。
谢谢!
答案 0 :(得分:4)
[DllImport("user32.dll")]
DllImport
属性允许您指定包含该方法的DLL的名称。通常的做法是将C#方法命名为与导出方法相同,但您也可以为C#方法使用不同的名称。 Task<string>
- 请参阅Generics
答案 1 :(得分:0)
喜欢[DllImport(“msvcrt.dll”)]?
C#代码可以通过两种方式直接调用非托管代码:
1. 直接调用从DLL导出的函数。
2.在COM对象上调用接口方法(有关此内容的更多信息,您还没有问过!,请参阅COM Interop Part C#客户端教程)。
简单,
DllImport
和dllexport
启用与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