最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c#調用c++方法介紹,window api

 更新時間:2013年10月29日 09:57:52   作者:  
c#在調用c++方法或者window api時不能象調用c#本身寫的dll類庫那樣直接通過引用dll就可以調用相應的方法, 而是要把要引用的dll放到bin中,現通過[DllImport("um_web_client.dll")]引用

例子1如下:

復制代碼 代碼如下:

//聲明部分

[DllImport("um_web_client.dll")]
  private static extern int CheckUserName(string UserName);

//

public static int AuthUserName(string username)
  {
   if(!IsConnection())
   {
    StartWebClient(UDBClientIP,UDBClientPort,UDBClientTimeout);
   }
   return CheckUserName(username);
  }


但是如果c++方法中用了指針或者結構體等則引用就要注意,相應就要用到引用數組或者指針,例子2:

聲明部分

復制代碼 代碼如下:

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi )]
  public class tagPlayerInfoOut
  {
   public int id;
   public String PlayerName;
   public int Country;
   public int OfficerRace;
   public int Level;
   public int MilitaryRank;
   public int Money;
   public int ResourceCount;
   public int CityCount;
   public int GeneralCount;
   public int Credit;
  }

  [ StructLayout( LayoutKind.Sequential )]
  public struct tagPlayerInfoOutEx
  {
   public int id;
   public IntPtr PlayerName;
   public int Country;
   public int OfficerRace;
   public int Level;
   public int MilitaryRank;
   public int Money;
   public int ResourceCount;
   public int CityCount;
   public int GeneralCount;
   public int Credit;
  }

 

[DllImport("um_web_client.dll")]
  public static extern int GetPlayerListCs(int maxrows, out int rows,  out IntPtr playerlist);

  [DllImport("um_web_client.dll")]
  public static extern int GetPlayerListCs(int maxrows, out int rows, tagPlayerInfoOutEx** playerlist);


方法
復制代碼 代碼如下:

public static DataTable UsingMarshal()
  {
   if(!IsConnection())
   {
    StartWebClient(UDBClientIP,UDBClientPort,UDBClientTimeout);
   }
   DataTable dt = new DataTable();

   dt.Columns.Add("id");
   dt.Columns.Add("PlayerName");
   dt.Columns.Add("Country");
   dt.Columns.Add("OfficerRace");
   dt.Columns.Add("Level");
   dt.Columns.Add("MilitaryRank");
   dt.Columns.Add("Money");
   dt.Columns.Add("ResourceCount");
   dt.Columns.Add("CityCount");
   dt.Columns.Add("GeneralCount");
   dt.Columns.Add("Credit");

   int size = 0;
   IntPtr outArray;
   GetPlayerListCs(20, out size, out outArray);
   tagPlayerInfoOut[] manArray = new tagPlayerInfoOut[size];
   IntPtr current = outArray;
   //Console.WriteLine("記錄數{0}",size);

   for( int i = 0; i < size; i++ )
   {
    manArray[ i ] = new tagPlayerInfoOut();
    Marshal.PtrToStructure(current, manArray[i]);
    Marshal.DestroyStructure(current, typeof(tagPlayerInfoOut) );
    current = (IntPtr)((long)current + Marshal.SizeOf(manArray[i]));

    dt.Rows.Add(new object[] {manArray[i].id,manArray[i].PlayerName,manArray[i].Country,manArray[i].OfficerRace,manArray[i].Level,manArray[i].MilitaryRank,manArray[i].Money,manArray[i].ResourceCount,manArray[i].CityCount,manArray[i].GeneralCount,manArray[i].Credit});

    dt.AcceptChanges();
   //Console.WriteLine( "Element {0}: {1} {2}", i, manArray[i].id, manArray[i].PlayerName);
  }
   Marshal.FreeCoTaskMem(outArray);
   return dt;
  }

  public static unsafe DataTable UsingUnsafe()
  {
   int size;
   if(!IsConnection())
   {
    StartWebClient(UDBClientIP,UDBClientPort,UDBClientTimeout);
   }
   DataTable dt = new DataTable();

   dt.Columns.Add("id");
   dt.Columns.Add("PlayerName");
   dt.Columns.Add("Country");
   dt.Columns.Add("OfficerRace");
   dt.Columns.Add("Level");
   dt.Columns.Add("MilitaryRank");
   dt.Columns.Add("Money");
   dt.Columns.Add("ResourceCount");
   dt.Columns.Add("CityCount");
   dt.Columns.Add("GeneralCount");
   dt.Columns.Add("Credit");
   tagPlayerInfoOutEx* pResult;
   GetPlayerListCs(20,  out size, &pResult );
   tagPlayerInfoOutEx* pCurrent = pResult;
   //Console.WriteLine("記錄數{0}",size);

   for( int i = 0; i < size; i++, pCurrent++ )
   {
    //Console.WriteLine( "Element {0}: {1} {2}", i, pCurrent->id ,Marshal.PtrToStringAnsi(pCurrent->PlayerName));
    //Marshal.FreeCoTaskMem(pCurrent->PlayerName );
    dt.Rows.Add(new object[] {pCurrent->id,pCurrent->PlayerName,pCurrent->Country,pCurrent->OfficerRace,pCurrent->Level,pCurrent->MilitaryRank,pCurrent->Money,pCurrent->ResourceCount,pCurrent->CityCount,pCurrent->GeneralCount,pCurrent->Credit});

    dt.AcceptChanges();
   }
   Marshal.FreeCoTaskMem((IntPtr)pResult );
   return dt;
  }

相關文章

  • 基于C#中XmlReader讀取Xml的深入分析

    基于C#中XmlReader讀取Xml的深入分析

    本篇文章是對C#中XmlReader讀取Xml進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C#配置文件設置及應用詳解

    C#配置文件設置及應用詳解

    在軟件開發(fā)過程中,配置文件是常用的一個功能,用于在程序運行時調整應用程序的行為,C# 提供了多種方式來創(chuàng)建和使用配置文件,本文將詳細介紹 C# 配置文件的創(chuàng)建、修改、讀取和寫入,以及跨平臺配置文件的應用,需要的朋友可以參考下
    2024-06-06
  • c#實現的操作oracle通用類

    c#實現的操作oracle通用類

    這篇文章主要介紹了c#實現的操作oracle通用類,用來操作oracle數據庫十分的方便,需要的朋友可以參考下
    2014-08-08
  • C#利用WMI操作DNS服務器(可遠程操作,需要相應權限)

    C#利用WMI操作DNS服務器(可遠程操作,需要相應權限)

    C#利用WMI操作DNS服務器(可遠程操作,需要相應權限)...
    2007-03-03
  • C#實現SSE(Server-Sent Events)服務端和客戶端的示例代碼

    C#實現SSE(Server-Sent Events)服務端和客戶端的示例代碼

    這篇文章主要為大家詳細介紹了C#實現SSE(Server-Sent Events)服務端和客戶端的相關知識,文中的示例代碼講解詳細,有需要的小伙伴可以參考下
    2024-03-03
  • C#實現循環(huán)發(fā)送電腦屏幕截圖

    C#實現循環(huán)發(fā)送電腦屏幕截圖

    這篇文章主要為大家詳細介紹了C#實現循環(huán)發(fā)送電腦屏幕截圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C#編程自學之數據類型和變量三

    C#編程自學之數據類型和變量三

    C#語言類型系統提出的一個核心概念裝箱(boxing)拆箱(unboxing)。裝箱和取消裝箱的概念是C#的類型系統的核心。它在“值類型”和“引用類型”之間的架起了一座橋梁,使得任何“值類型”的值都可以轉換為object類型的值,反過來轉換也可以。
    2015-10-10
  • C#中各種泛型集合的使用方法總結

    C#中各種泛型集合的使用方法總結

    這篇文章介紹了C#各種泛型集合的使用方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • WinForm中Application.Idle方法詳解

    WinForm中Application.Idle方法詳解

    本文詳細講解了WinForm中的Application.Idle方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • C#使用FileSystemWatcher控件實現的文件監(jiān)控功能示例

    C#使用FileSystemWatcher控件實現的文件監(jiān)控功能示例

    這篇文章主要介紹了C#使用FileSystemWatcher控件實現的文件監(jiān)控功能,結合實例形式分析了C# FileSystemWatcher組件的功能及監(jiān)控文件更改情況的具體使用技巧,需要的朋友可以參考下
    2017-08-08

最新評論

肥城市| 长治县| 土默特左旗| 沿河| 敖汉旗| 湘西| 徐州市| 梁河县| 镶黄旗| 铅山县| 金川县| 金昌市| 务川| 缙云县| 成武县| 页游| 宜川县| 永靖县| 开远市| 绥宁县| 北宁市| 青州市| 阜宁县| 丹阳市| 高雄市| 宝丰县| 大悟县| 平顶山市| 睢宁县| 永宁县| 昭苏县| 延安市| 新泰市| 陇川县| 象山县| 隆子县| 和林格尔县| 隆昌县| 永寿县| 乌拉特后旗| 三都|