源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

c#调用c++方法介绍,window api

  • 时间:2022-05-11 21:37 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:c#调用c++方法介绍,window api
例子1如下:
[u]复制代码[/u] 代码如下:
//声明部分 [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: 声明部分
[u]复制代码[/u] 代码如下:
[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);
方法
[u]复制代码[/u] 代码如下:
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;   }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部