程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 在P/Invoke中使用GCHandle傳送對象

在P/Invoke中使用GCHandle傳送對象

編輯:C#入門知識

在C#中調用非托管函數的時,有很多函數需要使用在C#中定義對象的地址;因此要使用到GCHandle類。

使用片斷:

DWORD ReadCert(
   UNT_DEV_HANDLE  hDev,
   BYTE*    pbCert,
   DWORD*    pdwCertLen,
   DWORD    dwFlag);
 

        /// Return Type: DWORD->unsigned int
        ///hDev: UNT_DEV_HANDLE->void*
        ///pbCert: BYTE*
        ///pdwCertLen: DWORD*
        ///dwFlag: DWORD->unsigned int
        [System.Runtime.InteropServices.DllImportAttribute("GAKeyPub", EntryPoint = "ReadCert")]
        public static extern int ReadCert(System.IntPtr hDev, [Out] IntPtr pbCert, ref int pdwCertLen, int dwFlag);
 

 

            byte[] certBytes = new byte[certLen];
            GCHandle hcertBytes = GCHandle.Alloc(certBytes, GCHandleType.Pinned);
            IntPtr pcert = hcertBytes.AddrOfPinnedObject();
            result = GAKeyPubInvoke.ReadCert(devHandle, pcert, ref certLen, 1);
 

這樣C#就可以取到數據了(並不是所有的非托管函數都適用)

 

 

    

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