手机
当前位置:查字典教程网 >编程开发 >C#教程 >c#调用c++方法介绍,window api
c#调用c++方法介绍,window api
摘要:例子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++方法介绍,window api】相关文章:

C# LINQ to XML应用介绍

C#调用Matlab生成的dll方法的详细说明

C#实现图片分割方法与代码

C#中方法的详细介绍

c#动态调用Webservice的两种方法实例

c#的异或运算符介绍

C#版ftp方法实现类的代码

使用异步方式调用同步方法(实例详解)

C#使用DllImport调用非托管的代码的方法

c#解压文件的实例方法

精品推荐
分类导航