.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
C#中与未操控语句交互运作

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

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);


 
}




相关文章

相关软件