c#如何调用c++

这篇文章主要介绍“c#如何调用c++”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“c#如何调用c++”文章能帮助大家解决问题。

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、网站空间、营销软件、网站建设、自流井网站维护、网站推广。

例子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++”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注创新互联行业资讯频道,小编每天都会为大家更新不同的知识点。


网站名称:c#如何调用c++
网站链接:http://ybzwz.com/article/jeehpp.html