C#调用C++dll 中具有高维指针参数的接口函数
来源:互联网 发布:记事本编程html 编辑:程序博客网 时间:2024/05/03 15:21
C#调用C++dll 中具有高维指针参数的接口函数
首先需要说明的是,这里的指针指向的都是基本类型,或基本类型的指针。
如果接口函数中有一维指针做参数,那么可以在C#中对应的声明中添加关键字ref。
如果是高维指针,那么上述方法就不行了。可采用如下两种做法。
做法一:如果高维指针指向的内存地址连续,考虑将指针转换为数组传递。C++中的多维数组与C#中的多维数组均是结构一致的连续内存块。因此只要两边数组各维大小均相同的情况下,可以直接传递。该方法操作简单,可以首先考虑。
C++代码:
extern "C" __declspec(dllexport) void fun(int a[][]);
C#代码:
public static extern void fun(int[,] a)
做法二:使用非安全代码。
C++代码:
extern "C" __declspec(dllexport) void fun(int** a);
C#代码:
public static extern unsafe void fun(int** a);
C#中比须在非安全代码中才能使用指针,因此为了调用上述函数,还需要定义一个包含unsafe代码段的函数。该方法的优点是较灵活,在处理多维数组的同时还可以处理交叉数组,和多个一维数组。
void callfun(int [,] a){unsafe{fixed(int* pa=a){int*[] pointersarray_a=new int[a.GetUpperBound(0)+1];for(int i=0;i<a.GetUpperBound(0)+1;i++){pointersarray_a[i]=pa+i*(a.GetUpperBound(1)+1);}fixed(int** pointerspointers_a=pointersarray_a){fun(pointerspointers_a);}}}}
- C#调用C++dll 中具有高维指针参数的接口函数
- C#调用C++DLL的小总结8---C++Dll中函数返回字符串指针
- C#中调用dll,函数参数带指针
- C#中调用C++的dll的参数为指针类型的导出函数
- C#中调用C++的dll的参数为指针类型的导出函数
- c#调用C接口时指针参数的接入
- C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)
- C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)
- C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)
- C#调用VC DLL接口函数参数类型对应介绍
- 在C#中调用C++Dll函数的方法
- C#调用VC的DLL的接口函数参数类型转换一览表
- C#调用VC的DLL的接口函数参数类型转换一览表
- C#调用VC的DLL的接口函数参数类型转换一览表
- C#调用VC的DLL的接口函数参数类型转换一览表
- C#调用VC的DLL的接口函数参数类型转换一览表_蓝竹傲雪
- C#调用VC的DLL的接口函数参数类型转换一览表
- C#调用VC的DLL的接口函数参数类型转换一览表
- android数据类型之间转换(系统介绍)
- 曾经为她流泪
- hdu1000
- IT情书
- JQuery常用代码收藏
- C#调用C++dll 中具有高维指针参数的接口函数
- hdu1001
- EXCEL小技巧
- 【热门技术】Winsock 搜索蓝牙设备
- 如何在Android中设置铃声+震动
- MyEclipse中消除frame引起的“the file XXX can not be found."的提示
- Direct3d 设备丢失 (device lost)
- 约瑟夫环问题变形——循环数到的数中,若某一位是给定数D,则踢出此人。
- jsp九大内置对象之(一)request