c#调用c++方法介绍,window api_C#教程-查字典教程网
c#调用c++方法介绍,window api
c#调用c++方法介绍,window api
发布时间:2016-12-28 来源:查字典编辑
摘要:例子1如下:复制代码代码如下://声明部分[DllImport("um_web_client.dll")]privatestaticexte...

例子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#教程学习
    热门C#教程学习
    编程开发子分类