首页 > 代码库 > ylbtech-LanguageSamples-Pinvoke(平台调用)
ylbtech-LanguageSamples-Pinvoke(平台调用)
ylbtech-Microsoft-CSharpSamples:ylbtech-LanguageSamples-Pinvoke(平台调用) |
1.A,示例(Sample) 返回顶部 |
“平台调用”示例
本示例演示了如何从 C# 中调用平台调用(导出的 DLL 函数)。有关更多信息,请参见互操作性(C# 编程指南) 。
安全说明 |
---|
提供此代码示例是为了阐释一个概念,它并不代表最安全的编码实践,因此不应在应用程序或网站中使用此代码示例。对于因将此代码示例用于其他用途而出现的偶然或必然的损害,Microsoft 不承担任何责任。 |
在 Visual Studio 中生成并运行“平台调用”示例
在“解决方案资源管理器”中,右击“PinvokeTest”项目并单击“设为启动项目”。
在“调试”菜单上,单击“开始执行(不调试)”。
对于 Marshal 和 Pinvoke,分别重复上述步骤。
从命令行生成并运行“平台调用”示例
使用“更改目录”命令转到“PinvokeTest”目录。
键入以下命令:
csc PinvokeTest.csPinvokeTest
使用“更改目录”命令转到“Marshal”目录。
键入以下命令:
csc Marshal.csMarshal
使用“更改目录”命令转到“Pinvoke”目录。
键入以下命令:
csc logfont.cs pinvoke.cspinvoke
1.B,Marshal 示例代码(Sample Code)返回顶部 |
1.B.1, Marshal.cs
// 版权所有(C) Microsoft Corporation。保留所有权利。// 此代码的发布遵从// Microsoft 公共许可(MS-PL,http://opensource.org/licenses/ms-pl.html)的条款。////版权所有(C) Microsoft Corporation。保留所有权利。// Marshal.csusing System;using System.Runtime.InteropServices;class PlatformInvokeTest{ [DllImport("msvcrt.dll")] public static extern int puts( [MarshalAs(UnmanagedType.LPStr)] string m); [DllImport("msvcrt.dll")] internal static extern int _flushall(); public static void Main() { puts("Hello World!"); _flushall(); }}
1.B.2,
1.B,Pinvoke 示例代码2(Sample Code)返回顶部 |
1.B.1, logfont.cs
// 版权所有(C) Microsoft Corporation。保留所有权利。// 此代码的发布遵从// Microsoft 公共许可(MS-PL,http://opensource.org/licenses/ms-pl.html)的条款。////版权所有(C) Microsoft Corporation。保留所有权利。// logfont.cs// 编译时使用:/target:moduleusing System;using System.Runtime.InteropServices;[StructLayout(LayoutKind.Sequential)]public class LOGFONT { public const int LF_FACESIZE = 32; public int lfHeight; public int lfWidth; public int lfEscapement; public int lfOrientation; public int lfWeight; public byte lfItalic; public byte lfUnderline; public byte lfStrikeOut; public byte lfCharSet; public byte lfOutPrecision; public byte lfClipPrecision; public byte lfQuality; public byte lfPitchAndFamily; [MarshalAs(UnmanagedType.ByValTStr, SizeConst=LF_FACESIZE)] public string lfFaceName; }
1.B.2, pinvoke.cs
// 版权所有(C) Microsoft Corporation。保留所有权利。// 此代码的发布遵从// Microsoft 公共许可(MS-PL,http://opensource.org/licenses/ms-pl.html)的条款。////版权所有(C) Microsoft Corporation。保留所有权利。// pinvoke.cs// 编译时使用:/addmodule:logfont.netmodule// csc pinvoke.cs /addmodule:logfont.netmoduleusing System;using System.Runtime.InteropServices;class PlatformInvokeTest{ [DllImport("gdi32.dll", CharSet=CharSet.Auto)] public static extern IntPtr CreateFontIndirect( [In, MarshalAs(UnmanagedType.LPStruct)] LOGFONT lplf // 特征 ); [DllImport("gdi32.dll")] public static extern bool DeleteObject( IntPtr handle ); public static void Main() { LOGFONT lf = new LOGFONT(); lf.lfHeight = 9; lf.lfFaceName = "Arial"; IntPtr handle = CreateFontIndirect(lf); if (IntPtr.Zero == handle) { Console.WriteLine("Can‘t creates a logical font."); } else { if (IntPtr.Size == 4) Console.WriteLine("{0:X}", handle.ToInt32()); else Console.WriteLine("{0:X}", handle.ToInt64()); // 删除所创建的逻辑字体。 if (!DeleteObject(handle)) Console.WriteLine("Can‘t delete the logical font"); } }}
1.B.3,
1.B,PinvokeTest 示例代码3(Sample Code)返回顶部 |
1.B.1, PinvokeTest.cs
// 版权所有(C) Microsoft Corporation。保留所有权利。// 此代码的发布遵从// Microsoft 公共许可(MS-PL,http://opensource.org/licenses/ms-pl.html)的条款。////版权所有(C) Microsoft Corporation。保留所有权利。// PInvokeTest.csusing 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(); }}
1.B.2,
1.C,下载地址(Free Download)返回顶部 |
作者:ylbtech 出处:http://ylbtech.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 |
ylbtech-LanguageSamples-Pinvoke(平台调用)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。