调用C++dll,需要传入一个函数指针,函数参数含有数组指针,用于传回数据,怎么老说我访问内存非法呀.

问题描述

C++dll代码回掉函数类型:voidcallback(BYTE*data,intnlen)//DLL设置回调函数voidSetCallBackFunc(CALL_BACK_FUNCcallback){m_callback=callback;}//dll调用回掉函数向C#传回数据voidStartDll(){BYTEbtData[100];for(bytei=0;i<100;i++){btData[i]=i;}m_callback(btData,100);//将数据通过回掉函数传回C#,此处出错.}///////////////////////////C#代码//声明委托函数,引入dll代码/////publicstaticvoidstartCsharp(){SetCallBackFunc(GetData);}publicstaticvoidGetData(BYTE[]btData,intlen){//处理data数组}现在的问题是,每次dll里面一掉用回掉函数,向C#代码传入数据时,C#能处理数据,但一返回dll,就崩溃了,内存错误.请问各位老大有谁碰到过这个问题?有兴趣的朋友可以自己写个简单的代码试验一下.dll用C++写,回调函数参数有指针用于传送数据的.

解决方案

解决方案二:
晕,没有一个人帮忙的?我是做c++出身的,对C#不是很熟。麻烦大家帮忙啊兄弟们。
解决方案三:
看帖子的时间是2008年的,现在都2012了。。我又遇到前辈曾经的问题了。。。正在纠结中!调试了好长时间,发现确实是这样的,回调后发生后进入C#中的代码是正常运行的,返回C++后,貌似就有点乱了,,if语句的两个分支中断点居然都命中!,C++函数返回后,立刻就提示缓冲区溢出!!问题不好解决啊,估计是dll中的函数调用约定和C#委托的调用约定不一样?!

时间: 2024-11-17 20:53:58

调用C++dll,需要传入一个函数指针,函数参数含有数组指针,用于传回数据,怎么老说我访问内存非法呀.的相关文章

java方法-java一个方法形参有两个,如何在调用的时候只传入一个参数

问题描述 java一个方法形参有两个,如何在调用的时候只传入一个参数 如题,有一个方法里两个形参,我另一个文件类中一个方法想要那个方法的返回值,可是第二个参数在这里用不到,能否只传第一个参数 如何实现,前提这个类不能继承后重写方法,因为多人合同写的. 解决方案 不可以,变通的办法是再写一个只有一个参数的函数重载形式,在其中给另一个参数一个预设值,间接调用. 解决方案二: 一个Action调用两个不同的方法 解决方案三: 调用的时候给一个无影响的值 解决方案四: 讲道理的话是不能这样做的,不过如果

C++中的指针、数组指针与指针数组、函数指针与指针函数

C++中的指针.数组指针与指针数组.函数指针与指针函数 本文从初学者的角度,深入浅出地详解什么是指针.如何使用指针.如何定义指针.如何定义数组指针和函数指针,并给出对应的实例演示:接着,区别了数组指针与指针数组.函数指针与指针函数:最后,对最常混淆的引用传递.值传递和指针传递做了区处. C++中一个重要的特性就是指针,指针不仅具有获得地址的能力,还具有操作地址的能力.指针可以用于数组.或作为函数的参数,用来访问内存和对内存的操作,指针的使用使得C++很高效,但是指针也非常危险,使用不当会带来比较

c++-.NET2012 object型的byte数组,作为参数,传给C++DLL封装的一个变体类型

问题描述 .NET2012 object型的byte数组,作为参数,传给C++DLL封装的一个变体类型 VB2012: 调用C++DLL,传入参数为一个二进制byte数组. c++: 接收参数类型为variant 报类型不一致错误. 请问.net能不能把byte型char数组,传给C++dll中封装的变体类型参数? 注:vb6可以实现.2012报错. 解决方案 byte型char数组是什么?byte就是byte,char就是char

PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)_php实例

一.数组遍历的3个方法介绍 1. foreach() foreach()是一个用来遍历数组中数据的最简单有效的方法. #example1: 复制代码 代码如下: <?php $colors= array('red','blue','green','yellow'); foreach ($colorsas$color){ echo "Do you like $color? <br />"; } ?> 显示结果: Do you like red? Do you li

图文详解c/c++中的多级指针与多维数组_C 语言

前言 首先先声明一些常识,如果你对这些常识还不理解,请先去弥补一下基础知识:      1.实际上并不存在多维数组,所谓的多维数组本质上是用一维数组模拟的.      2.数组名是一个常量(意味着不允许对其进行赋值操作),其代表数组首元素的首地址.      3.数组与指针的关系是因为数组下标操作符[],比如,int a[3][2]相当于*(*(a+3)+2) .      4.指针是一种变量,也具有类型,其占用内存空间大小和系统有关,一般32位系统下,sizeof(指针变量)=4.      

一维数组,二维数组,三维数组,数组与指针,结构体数组,通过改变指针类型改变访问数组的方式

 打印数组中的每个元素,打印每个元素的地址: #include <stdio.h> #include <stdlib.h>   void main(void) {     int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };     for (int *p = a; p < a + 10;p++)  //指针类型决定4个字节     {         printf("\n%p,%d", p, *p);    

《指针的编程艺术(第二版)》一3.2 指针与二维数组

3.2 指针与二维数组 指针的编程艺术(第二版) 一维数组与指针的关系前面已经介绍过.一维数组的元素值,可使用[]或一个*得到,假设有一个数组如下: int i[7] = {0, 1, 2, 3, 4, 5, 6}; int *ptr=i; 则(i+2) 或i[2] 或(ptr+2) 或ptr[2],都表示数组某一个元素的值.而二维数组(two dimension array){XE "二維陣列(two dimension)"},则需要两个,或一个与一个[ ],或两个[ ],才能得到数

C语言 指针与二维数组详解_C 语言

二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,它们之间没有"缝隙".以下面的二维数组 a 为例: int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} }; 从概念上理解,a 的分布像一个矩阵: 0   1   2   3 4   5   6   7 8   9  10  11 但在内存中,a 的分布是一维线性的,整个数组占用一块连续的内存: C语言中的二维数组是按行排列的,也就是先存放 a[

求大神讲解一下指针指向二维数组时该怎么用?

问题描述 求大神讲解一下指针指向二维数组时该怎么用? 指针指向一维数组时只用*(p+n)即可,但是二维数组时候改怎么用呢? 解决方案 个人认为其实二维数组还是一维数组,没有什么区别,例如int a[3][4],就相当于int a[12].要想访问a[2][3],就用*(a+(4*2+3)*(sizeof(int))),应该是这样,不过我一般用a[4*2+3] 来访问对应的元素 本人也是菜鸟,如果有错还请大神们指正~ 解决方案二: 由于指针与数组之间可以若转化,所以在一定程度上可以理解为数组就是指