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

c#調(diào)用c++方法介紹,window api

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

例子1如下:

復(fù)制代碼 代碼如下:

//聲明部分

[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++方法中用了指針或者結(jié)構(gòu)體等則引用就要注意,相應(yīng)就要用到引用數(shù)組或者指針,例子2:

聲明部分

復(fù)制代碼 代碼如下:

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


方法
復(fù)制代碼 代碼如下:

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("記錄數(shù){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("記錄數(shù){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;
  }

相關(guān)文章

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

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

    本篇文章是對(duì)C#中XmlReader讀取Xml進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#配置文件設(shè)置及應(yīng)用詳解

    C#配置文件設(shè)置及應(yīng)用詳解

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

    c#實(shí)現(xiàn)的操作oracle通用類

    這篇文章主要介紹了c#實(shí)現(xiàn)的操作oracle通用類,用來(lái)操作oracle數(shù)據(jù)庫(kù)十分的方便,需要的朋友可以參考下
    2014-08-08
  • C#利用WMI操作DNS服務(wù)器(可遠(yuǎn)程操作,需要相應(yīng)權(quán)限)

    C#利用WMI操作DNS服務(wù)器(可遠(yuǎn)程操作,需要相應(yīng)權(quán)限)

    C#利用WMI操作DNS服務(wù)器(可遠(yuǎn)程操作,需要相應(yīng)權(quán)限)...
    2007-03-03
  • C#實(shí)現(xiàn)SSE(Server-Sent Events)服務(wù)端和客戶端的示例代碼

    C#實(shí)現(xiàn)SSE(Server-Sent Events)服務(wù)端和客戶端的示例代碼

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

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

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

    C#編程自學(xué)之?dāng)?shù)據(jù)類型和變量三

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

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

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

    WinForm中Application.Idle方法詳解

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

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

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

最新評(píng)論

兴义市| 梓潼县| 全椒县| 河北省| 泰宁县| 荆州市| 铜梁县| 鄂托克旗| 建湖县| 克山县| 营山县| 五大连池市| 衢州市| 涞源县| 利川市| 阜城县| 涟源市| 香港 | 花垣县| 华蓥市| 斗六市| 平舆县| 昌黎县| 阿荣旗| 晋中市| 西和县| 马鞍山市| 崇阳县| 麦盖提县| 江达县| 古田县| 广宁县| 岑巩县| 浙江省| 枞阳县| 博乐市| 太白县| 都江堰市| 武城县| 崇仁县| 安乡县|