C#中与未操控语句交互运作

using System;
using System.Runtime.InteropServices;

namespace FastCSharp
{
 class Class1
 {

  
  [STAThread]
  unsafe static void Main(string[] args)
  {
//   comInvoke();
//   helloWorld();
//   StructInvoke();   
//   classInvode();
//   PointerInvoke();
   unsafeMethod();
  }

//  调用一个com组件
//  tlbimp工具
  public static void comInvoke()
  {
   //string fileName = "c://windows//clock.avi";
   string fileName = @"C:/Documents and Settings/Administrator/桌面/WebApplication1/心中心密咒/dgmz.wma";
   QuartzTypeLib.FilgraphManager graphManager = new QuartzTypeLib.FilgraphManagerClass();
   QuartzTypeLib.IMediaControl mc = (QuartzTypeLib.IMediaControl)graphManager;
   mc.RenderFile(fileName);
   mc.Run();
   Console.WriteLine("Hello World");
   Console.ReadLine();
  }
  public static void helloWorld()
  {
   Win32Invoke.MessageBox(0,"Hello World","Platform Invoke Sample",0);
  }
//  传递结构变量
  public static void StructInvoke()
  {
   Point p = new Point();
   p.x = 1;
   p.y = 1;
   Rect r = new Rect();
   r.left = 0;
   r.bottom = 2;
   r.right = 2;
   r.top = 0;
   bool b = Win32Invoke.PtInRect(ref r,p);
   System.Console.WriteLine("Point[1,1] is int Rect[0,0,2,2] ?" +b );
  }
//  传递一个对象
  public static void classInvode()
  {
   MySystemTime t = new MySystemTime();
   Win32Invoke.GetSystemTime(t);
   Console.WriteLine("System time is "
    + t.wYear + "/"
    + t.wMonth + "/"
    + t.wDay + " "
    + t.wHour + ":"
    + t.wMinute + ":"
    + t.wSecond
    );

  }
//  传送一个C#函数指针给Dll函数
  public static void PointerInvoke()
  {
   CallBack myCallBack = new CallBack(Class1.Report);
   Win32Invoke.EnumWindows(myCallBack,0);
  }
  public static bool Report(int hwnd, int lParam)
  {
   Console.WriteLine("Window handle is" + hwnd);
   return true;
  }
//  指针函数
  unsafe static void SquareParam(int *p)
  {
   //unsafe mthod:takes pointer to int
   *p *= *p;
  }
//  unsafe method : user address-of operator (&)
  unsafe public static void unsafeMethod()
  {
   int i = 5;
   SquareParam(&i);
   Console.WriteLine("5 * 5 == " + i );
   P pt = new P();
   pt.x = 5;
   pt.y = 6;
   //fixed 关键字是告诉c#资源回收器接下来不要对某过变量的地址进行运算,不要对此变量的地址有任何改动
   //pin pt in place
   fixed(int* pointer =&pt.x)
   {
    
    SquareParam(pointer);
   }
   //pt now nupinned
   Console.WriteLine("pt.x == {0} pt.y == {1}",pt.x,pt.y);
  }
 }
 public class Win32Invoke
 {
  [DllImport("user32.dll",CharSet = CharSet.Auto)]
   public static extern int MessageBox(int hWnd,String text,String caption,uint type);
  [DllImport("user32.dll")]
   public static extern bool PtInRect(ref Rect r, Point p);
  [DllImport("Kernel32.dll")]
   public static extern void GetSystemTime(MySystemTime st);
  [DllImport("user32.dll")]
   public static extern int EnumWindows(CallBack x, int y);
 }

 public struct Point
 {
  public int x;
  public int y;
 }
 public class P
 {
  public int x;
  public int y;
 }
 [StructLayout(LayoutKind.Explicit)]
 public struct Rect
 {
  [FieldOffset(0)] public int left;
  [FieldOffset(4)] public int top;
  [FieldOffset(8)] public int right;
  [FieldOffset(12)] public int bottom;
 }
 [StructLayout(LayoutKind.Sequential)]
 public class MySystemTime
 {
  public ushort wYear;
  public ushort wMonth;
  public ushort wDayOfWeek;
  public ushort wDay;
  public ushort wHour;
  public ushort wMinute;
  public ushort wSecond;
  public ushort wMilliseconds;
 }
// delegate
 public delegate bool CallBack(int hwnd, int lParam);


 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值