c#调用c++方法介绍,windowapi
例子1如下:
//声明部分
[DllImport("um_web_client.dll")]
privatestaticexternintCheckUserName(stringUserName);
//
publicstaticintAuthUserName(stringusername)
{
if(!IsConnection())
{
StartWebClient(UDBClientIP,UDBClientPort,UDBClientTimeout);
}
returnCheckUserName(username);
}
但是如果c++方法中用了指针或者结构体等则引用就要注意,相应就要用到引用数组或者指针,例子2:
声明部分
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]
publicclasstagPlayerInfoOut
{
publicintid;
publicStringPlayerName;
publicintCountry;
publicintOfficerRace;
publicintLevel;
publicintMilitaryRank;
publicintMoney;
publicintResourceCount;
publicintCityCount;
publicintGeneralCount;
publicintCredit;
}
[StructLayout(LayoutKind.Sequential)]
publicstructtagPlayerInfoOutEx
{
publicintid;
publicIntPtrPlayerName;
publicintCountry;
publicintOfficerRace;
publicintLevel;
publicintMilitaryRank;
publicintMoney;
publicintResourceCount;
publicintCityCount;
publicintGeneralCount;
publicintCredit;
}
[DllImport("um_web_client.dll")]
publicstaticexternintGetPlayerListCs(intmaxrows,outintrows, outIntPtrplayerlist);
[DllImport("um_web_client.dll")]
publicstaticexternintGetPlayerListCs(intmaxrows,outintrows,tagPlayerInfoOutEx**playerlist);
方法
publicstaticDataTableUsingMarshal()
{
if(!IsConnection())
{
StartWebClient(UDBClientIP,UDBClientPort,UDBClientTimeout);
}
DataTabledt=newDataTable();
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");
intsize=0;
IntPtroutArray;
GetPlayerListCs(20,outsize,outoutArray);
tagPlayerInfoOut[]manArray=newtagPlayerInfoOut[size];
IntPtrcurrent=outArray;
//Console.WriteLine("记录数{0}",size);
for(inti=0;i<size;i++)
{
manArray[i]=newtagPlayerInfoOut();
Marshal.PtrToStructure(current,manArray[i]);
Marshal.DestroyStructure(current,typeof(tagPlayerInfoOut));
current=(IntPtr)((long)current+Marshal.SizeOf(manArray[i]));
dt.Rows.Add(newobject[]{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);
returndt;
}
publicstaticunsafeDataTableUsingUnsafe()
{
intsize;
if(!IsConnection())
{
StartWebClient(UDBClientIP,UDBClientPort,UDBClientTimeout);
}
DataTabledt=newDataTable();
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, outsize,&pResult);
tagPlayerInfoOutEx*pCurrent=pResult;
//Console.WriteLine("记录数{0}",size);
for(inti=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(newobject[]{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);
returndt;
}
相关文章
- 2021年游戏项目的十大编程语言:C++、Java、C#均上榜「建议收藏」
- C# Dictionary通过Value找Key[通俗易懂]
- 【单片机入门】(三)应用层软件开发的单片机学习之路-----UART串口通讯和c#交互
- 深入理解C++11_c++ string char
- C++stl库_c++库
- c++的链表-链表入门(C++)
- c#面试题抽象类和接口的区别-金三银四面试:C#程序员经常遇到的30道基础面试题,想你所想
- c++基础篇之C++ 模板
- C#使用正则表达式实例
- C#中StringBuilder用法以及和String的区别分析
- C#实现抓取网站页面内容的实例方法
- 浅析C#与C++相关概念的比较
- 淘宝IP地址库采集器c#代码
- c#将list类型转换成DataTable方法示例
- C#Access数据库增删查改的简单方法
- C#探秘系列(四)——GetHashCode,ExpandoObject
- C#特性之匿名方法和Lambda表达式
- C#中的程序集和反射介绍
- C#实现获取MAC地址的方法
- C#实现绘制浮雕图片效果实例
- C#入门之checked和unchecked的区别实例解析
- C++与C#互调dll的实现步骤