程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> C#調用API函數示例

C#調用API函數示例

編輯:.NET實例教程

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ApiTest
...{
    class FileReader
    ...{
        const uint GENERIC_READ = 0x80000000;
        const uint OPEN_EXISTING = 3;
        System.IntPtr handle;

        [System.Runtime.InteropServices.DllImport("kernel32", SetLastError = true)]
        static extern unsafe System.IntPtr CreateFile
        (
            string FileName,          // file name
            uint DesiredAccess,       // Access mode
            uint ShareMode,           // share mode
            uint SecurityAttributes,  // Security Attributes
            uint CreationDisposition, // how to create
            uint FlagsAndAttributes,  // file attributes
            int hTemplateFile         // handle to template file
        );

        [System.Runtime.InteropServices.DllImport("kernel32", SetLastError = true)]
        static extern unsafe bool ReadFile
        (
            System.IntPtr hFile,      // handle to file
            void* pBuffer,            // data buffer

                OPEN_EXISTING,
                0,
                0
            );

            if (handle != System.IntPtr.Zero)
            ...{
                return true;
            }
            else
            ...{
                return false;
            }
        }

        public unsafe int Read(byte[] buffer, int index, int count)
        ...{
            int n = 0;
            fixed (byte* p = buffer)
      ...{
                if (!ReadFile(handle, p + index, count, &n, 0))
                ...{
                    return 0;
                }
            }
            return n;
        }

        public bool Close()
        ...{
            return CloseHandle(handle);
        }
    }

    class Program
    ...{
        static int Main(string[] args)
  ...{
            if (args.Length != 1)
            ...{
                System.Console.WriteLine("Usage : ReadFile <FileName>");
                return 1;
            }

            if (!System.IO.File.Exists(args[0]))
            ...{
                System.Console.WriteLine("File " + args[0] + " not found.");
                return 1;
            }

            byte[] buffer = new byte[128];
            FileReader fr = new FileReader();

            if (fr.Open(args[0]))
            ...{
                // Assume that an ASCII file is being read.
         System.Text.ASCIIEncoding Encoding = new System.Text.ASCIIEncoding();

                int bytesRead;
                do
                ...{
                    bytesRead = fr.Read(buffer, 0, buffer.Length);
                    string content = Encoding.GetString(buffer, 0, bytesRead);
                    System.Console.Write("{0}", content);
                }
                while (bytesRead > 0);

                fr.Close();
                return 0;
            }
            else
            ...{
                System.Console.WriteLine("Failed to open requested file");
                return 1;
            }

        }
    }
}

特別要注意的是,由於代碼中用到了unsafe代碼,因此,編譯的時候需要在項目屬性中勾選允許編譯Unsafe的選項:

否則會報:

Unsafe code may only appear if compiling with /unsafe

的錯誤。

 



            int NumberOfBytesToRead,  // number of bytes to read
            int* pNumberOfBytesRead,  // number of bytes read
            int Overlapped            // overlapped buffer
        );

        [System.Runtime.InteropServices.DllImport("kernel32", SetLastError = true)]
        static extern unsafe bool CloseHandle
        (
            System.IntPtr hObject // handle to object
        );

        public bool Open(string FileName)
        ...{
            // open the existing file for reading       
            handle = CreateFile
            (
                FileName,
                GENERIC_READ,
                0,
                0,

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved