[DllImport("ScreenCaptureLib.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void Init();
[DllImport("ScreenCaptureLib.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int ScreenCapture(IntPtr img);
C#调用应该尽量避免用引用型的数组传递,因为c#里的数组不是连续的内存空间,c#里如果数组类型是简单类型那内存就是连续的。如果内存是引用类型那内存不是连续的,只是一个引用地址的数组,传给c++后c++操作连续内存空间c#里是得不到的。
C#的简单值类型数组传给c++的时候可以在c++端直接写指针,在c#端写数组,如下是成立的
int ScreenCapture(Pixcel (* image)[20][240][240], int (* xyDataP)[40], double (* scaleDataP)[20]){
}
[DllImport("ScreenCaptureLib.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int ScreenCapture(IntPtr img, int[] xyData, double[] scaleData);
但是只能做到单项传递,即c#数组传给c++,如果在c++中改变c#数组中的值,c#中的值是不会跟着变得。
如果想在c++改c#中的数组,只能用IntPtr p = Marshal.AllocHGlobal(3 * 20 * 240 * 240);申请空间,然后把IntPtr传给c++,ScreenCapture(p,xyData,scaleData);,然后用Marshal.Copy(p, imageData, 0, 20 * 240 * 240 * 3);,把值拷贝给c#数组。
参照最后一个项目:http://www.cnblogs.com/wangjixianyun/archive/2013/04/10/3012556.html
传参:
转自:http://blog.csdn.net/Mittermeyer/article/details/1586867
0、前言从VB到C#,被人诟病比较多的就是交互性比较差,又集中表现在调用Win32 API上。如果说C/C++调用API只是调用函数这类轻松的活,在C#下却成了阻挡入门者的技术活。之所以产生这么大区别在于数据类型的差异,就是因为C#这类采用了“安全”的类型,我们避免了内存释放和内存访问错误的一些困扰,但是不得不面对调用API时的繁琐。有得必有失,关键看你选择了什么。在调用API时,对于值类型的数据,不存在什么转换问题,只要搞清楚到底是Byte、Int16、Int32 还是Int64就可以了,比较麻烦的地方是指针,因为C#中没有办法显性的使用指针,有时需要借助unsafe code达到这个目的。如果都“unsafe”了,那还用C#干吗,本文的目的就是总结一下,怎样用“safe”的方式解决Win32 API中指针类型参数的问题。 1、 基本原则在我们在调用API时,如果发现参数中有指针类型的时候,不要简单的用IntPtr去替换,或者直接就是用*来定义。虽然C#中能够使用指针,但是这样做就违背了C#设计时的初衷,此外DotNET Framework平台下使用unsafe代码多少会影响应用程序的效率。当我们拿到一个API,阅读API的说明时,一定要关注以下几点:l 每一个参数的数据类型是什么?如果是指针,指针指向的是一个什么数据结构,基本数据类型、字符串、结构还就是一块内存。不同的类型在C#下处理的模式是不同的。l 指针所指向的数据结构是谁创建,该由谁释放?这也非常重要,它两层含义:一个是我们怎么定义接口,并且准备调用参数;另一个就是资源释放的问题,某些调用这申请,被调用这释放的资源,需要约定的方法申请或释放资源,反之亦然。只要花点时间分析一下,就会发现即便是在复杂的结构,不用“unsafe code”也能够完成调用,只不过有时候过程有点繁琐,不如C/C++调用API那么畅快淋漓。但是我想说的是,如果选择了C#,那么就是C#的思想去解决问题,这样才能够发挥出C#所有的潜力。 2、实例分析了解了基本原则,下面就逐一分析一下怎样雅致并且“安全”地解决不同类型指针的调用问题。2.1、 字符串字符串应该是我们接触到最多的情况,一般在API定义中被描述为“LPSTR/LPTSTR/LPCTSTR/LPWSTR”之类,我们在申明API接口的时候,如果是传入类型的参数,直接用String类型申明即可,例如:
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yVTNSaGNuUXVaMmxt.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yUlc1a0xtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yVTNSaGNuUXVaMmxt.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yUlc1a0xtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yVTNSaGNuUXVaMmxt.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yUlc1a0xtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yVTNSaGNuUXVaMmxt.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yUlc1a0xtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
///原形:HRESULT WINAPI GetDeviceID(LPCGUID pGuidSrc, LPGUID pGuidDest);
///</summary>
///<param name="pGuidSrc"></param>
///<param name="pGuidDest"></param>
///<returns></returns>
[DllImport("Dsound.dll")]
private static extern Int32 GetDeviceID(ref Guid pGuidSrc, ref Guid pGuidDest);
如果自定义结构的话,结构在内存中占据的字节数务必要匹配,当结构中包含数组的时候需要用MarshalAsAttribute属性进行修饰,设定数组长度。具体可以参考下面的例子:
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yVTNSaGNuUXVaMmxt.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yUlc1a0xtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yVTNSaGNuUXVaMmxt.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yUlc1a0xtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yVTNSaGNuUXVaMmxt.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yUlc1a0xtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
///原形:
/// typedef struct tagACCEL {
/// BYTE fVirt;
/// WORD key;
/// WORD cmd;
/// } ACCEL, *LPACCEL;
///</summary>
public struct ACCEL
{
public Byte fVirt;
public UInt16 key;
public UInt16 cmd;
}
///<summary>
///原形:int CopyAcceleratorTable(HACCEL hAccelSrc,LPACCEL lpAccelDst,int cAccelEntries);
///</summary>
///<returns></returns>
[DllImport("user32")]
public static extern Int32 CopyAcceleratorTable(IntPtr hAccelSrc, ACCEL[] lpAccelDst, Int32 cAccelEntries);
但是也有特殊情况,对些厂商提供的API中,不知是否和内存复制的方式有关,类似的函数,如果采用上面相同的定义方法调用的话,调用正确,但是应该返回的数据没有被改写。这个时候就需要另一种方法来解决了。众所周知,在逻辑上结构是一段连续的内存,数组也是一段连续内存,我们可以从堆中直接申请一段内存,调用API,然后将返回的数据再转换成结构即可。具体可以参看下面的例子。结构定义以及API声明: [StructLayout(LayoutKind.Sequential, Pack = 8)]
private struct CmBoxInfo
{
public static CmBoxInfo Empty = new CmBoxInfo();
public byte MajorVersion;
public byte MinorVersion;
public ushort BoxMask;
public uint SerialNumber;
public ushort BoxKeyId;
public ushort UserKeyId;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = CM_PUBLIC_KEY_LEN)] public byte[] BoxPublicKey;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = CM_PUBLIC_KEY_LEN)] public byte[] SerialPublicKey;
public uint Reserve;
public void Init()
{
BoxPublicKey = new byte[CM_PUBLIC_KEY_LEN];
Debug.Assert(BoxPublicKey != null);
SerialPublicKey = new byte[CM_PUBLIC_KEY_LEN];
Debug.Assert(SerialPublicKey != null);
}
}
///<summary>
///原型:int CMAPIENTRY CmGetBoxes(HCMSysEntry hcmse, unsigned long idPort, CMBOXINFO *pcmBoxInfo, unsigned int cbBoxInfo)
///</summary>
[DllImport("xyz.dll")]
private static extern Int32 CmGetBoxes(IntPtr hcmse, CmGetBoxesOption idPort,IntPtr pcmBoxInfo, Int32 cbBoxInfo);
调用示例 IntPtr hcmBoxes = IntPtr.Zero;
CmAccess cma = new CmAccess();
CmBoxInfo[] aBoxList = null;
Int32 dwBoxNum = 0, dwLoop = 0,dwBoxInfoSize = 0;
IntPtr pBoxInfo = IntPtr.Zero;
dwBoxNum = m_pCmGetBoxes(hcmBoxes, CmGetBoxesOption.AllPorts, IntPtr.Zero, 0);
if (dwBoxNum > 0)
{
aBoxList = new CmBoxInfo[dwBoxNum];
if (aBoxList != null)
{
dwBoxInfoSize = Marshal.SizeOf(aBoxList[0]);
pBoxInfo = Marshal.AllocHGlobal(dwBoxInfoSize * dwBoxNum);
if (pBoxInfo != IntPtr.Zero)
{
dwBoxNum = m_pCmGetBoxes(hcmBoxes, CmGetBoxesOption.AllPorts, pBoxInfo, dwBoxNum);
for (dwLoop = 0; dwLoop < dwBoxNum; dwLoop++)
{
aBoxList[dwLoop] = (CmBoxInfo)Marshal.PtrToStructure((IntPtr)((UInt32)pBoxInfo + dwBoxInfoSize * dwLoop), CmBoxInfo.Empty.GetType());
}
Marshal.FreeHGlobal(pBoxInfo);
pBoxInfo = IntPtr.Zero;
}
else
{
aBoxList = null;
}
}
}
最后提一句,Marshal类非常有用,其中包括了大量内存申请、复制和类型转换的函数,灵活运用的话,基本上可以避免unsafe code。 2.6、 函数指针(回调函数)C#中采用委托(delegate)和函数指针等同的功能,当API函数的参数为回调函数时,我们通常使用委托来替代。与C和C++ 中的函数指针相比,委托实际上是具体一个Delegate派生类的实例,它还包括了对参数和返回值,类型安全的检查。先看一下下面的例子: ///<summary>
///原形:typedef BOOL (CALLBACK *LPDSENUMCALLBACKA)(LPGUID, LPCSTR, LPCSTR, LPVOID);
///</summary>
public delegate Boolean LPDSENUMCALLBACK(IntPtr guid, String sDesc, String sDevName, ref Int32 dwFlag);
///<summary>
///原形:HRESULT WINAPI DirectSoundCaptureEnumerateA(LPDSENUMCALLBACKA pDSEnumCallback, LPVOID pContext);
///</summary>
[DllImport("Dsound.dll")]
public static extern Int32 DirectSoundCaptureEnumerate(LPDSENUMCALLBACK pDSEnumCallBack, ref Int32 dwFlag);
具体调用方法如下:
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yVTNSaGNuUXVaMmxt.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yUlc1a0xtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yVTNSaGNuUXVaMmxt.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUpia0pzYjJOckxtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OUZlSEJoYm1SbFpFSnNiMk5yUlc1a0xtZHBaZz09.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)
![c#和c++互操作(平台调用相关) c#和c++互操作(平台调用相关)](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0RvdkwybHRZV2RsY3k1amMyUnVMbTVsZEM5emVXNTBZWGhvYVdkb2JHbG5hSFJwYm1jdlQzVjBiR2x1YVc1blNXNWthV05oZEc5eWN5OU9iMjVsTG1kcFpnPT0%3D.jpg?w=700&webp=1)