很抱歉这个非常模糊的问题,但我不确定如何谷歌/问这个。
基本上,我在很多 c# 代码中看到了这 2 行(类似的):
[DllImport("user32.dll")]
和
Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");
在第一个片段中,它实际上在做什么。有什么[ ]
用?
在第二个片段中,<string>
声明是什么,因此我可以找到更多信息。
谢谢!
很抱歉这个非常模糊的问题,但我不确定如何谷歌/问这个。
基本上,我在很多 c# 代码中看到了这 2 行(类似的):
[DllImport("user32.dll")]
和
Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");
在第一个片段中,它实际上在做什么。有什么[ ]
用?
在第二个片段中,<string>
声明是什么,因此我可以找到更多信息。
谢谢!
像 [DllImport("msvcrt.dll")] 吗?
C#代码可以直接调用非托管代码有两种方式:
1.直接调用从DLL中导出的函数。
2.在 COM 对象上调用接口方法(有关此方面的更多信息,您还没有问过!请参阅 COM 互操作部分 C# 客户端教程)。
简单地说,
DllImport
并dllexport
启用与 DLL 文件的互操作。我们可以使用 C++ DLL 动态链接库,或自定义的旧版 DLL — 甚至是我们无法重写但能够修改的。
最佳导师: http: //www.dotnetperls.com/dllimport
直接从 C# 调用 DLL 导出
要将方法声明为具有来自 DLL 导出的实现,请执行以下操作: 使用 static 和 extern C# 关键字声明方法。将 DllImport 属性附加到该方法。DllImport 属性允许您指定包含该方法的 DLL 的名称。通常的做法是将 C# 方法命名为与导出的方法相同的名称,但您也可以为 C# 方法使用不同的名称。(可选)为方法的参数和返回值指定自定义封送处理信息,这将覆盖 .NET Framework 默认封送处理。
示例 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