2 atfeel atfeel 于 2016.01.15 18:31 提问

C#返回byte[]给dll的方法,寻求帮助

谁能帮下我。我是新手中的新手,第一次用C++,目前只想解决这个问题
我现在的需求是,DLL里调用了C#的委托函数,委托函数返回字节数组给DLL,DLL再接下去处理

这个C#的委托函数的代码
static IntPtr sendDataFun(IntPtr buf, int len)
{
byte[] buffer = new byte[len];
Marshal.Copy(buf, buffer, 0, len);
//此处是各种处理。。省略

  //获取buffer字节数组的内存地址
  IntPtr pin = GCHandle.ToIntPtr(GCHandle.Alloc(buffer));
  return pin;//把内存地址返回给DLL

}

这里是C++ 写的DLL代码
//这行前面的int 类型应该改成什么才能接收C#返回IntPtr类型
typedef int (WINAPI mhook_func)(char buf, int len);//这个结构就是下面_msend函数的

int WINAPI send(const char *buf, int len)
{
char *temp = new char[len];
memcpy_s(temp, len, buf, len);

//_msend就是C#的委托函数(sendDataFun),先将temp和len发送给C#的处理,再返回字节数组,再转成 char *
char * aa = _msend(temp, len);//这里要怎么做才能把C#返回的IntPtr指针内容读取并转成char * 
//重点在这一部分。怎么实现我要的功能

//第一个参数aa就是上面上行从C#返回的字节数组的char *
int ret = g_trueSend(aa, len);
delete temp;

}

谢谢大家,我对C++不了解,希望能好人做到底,在我的基础上改代码,给提示我,我也不懂的,免得若大家烦。

1个回答

caozhy
caozhy   Ds   Rxr 2016.01.15 18:38

IntPtr是指针类型,你为什么定义为char?定义成void *比较好。

atfeel
atfeel 我是随便写的,应该写什么呢
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C#返回byte[]给dll的方法,寻求帮助
谁能帮下我。我是新手中的新手,第一次用C++,目前只想解决这个问题 我现在的需求是,DLL里调用了C#的委托函数,委托函数返回字节数组给DLL,DLL再接下去处理 这个C#的委托函数的代码 static IntPtr sendDataFun(IntPtr buf, int len)  {        byte[] buffer = new byte[len];        Ma
C++ Dll回调C#方法,Dll中要将字节数组传递给回调方法
转载:http://www.cnblogs.com/Eashion/archive/2008/12/18/1357681.html  在VC中封装的网络通信模块,在异步接收到数据时需要将内容传递给C#中的消息处理函数,于是便出现了如标题所说的情况。     C++的回调函数中有一个参数,是处理接收到的字节流的回调函数指针,定义基本如下:          typedef  void  (
c#调用c++写成的dll文件,返回char*,返回数组,用ref接收,byte[] (zz)
c#调用c++写成的dll文件,返回char*,返回数组,用ref接收,byte[] ,最近做个项目,又想不起来了。这下Mark一下 / Inclusion guard #ifndef _DLLTUT_DLL_H_ #define _DLLTUT_DLL_H_ // Make our life easier, if DLL_EXPORT is defined in a file
Unity调用C++编写的dll传递数组
       主要是最近在Unity里想调用一个自己用C++写的dll,然后传递一下数组。结果自己知识浅薄,竟然连IntPtr也不大会用。但是最后终于还算是实现了想要的功能。在这里记录一下,以后再遇到类似的情况直接翻出来看看代码就行了。       首先是以数组作为返回值的情况。具体的怎么建dll工程就不说了,只记录一下部分比较重要的代码,大概之后能看懂意思,再照着改就好了。C++的代码如下,首先...
python碰到问题的时候应该如何查找帮助
编程的时候最痛苦的事情就是不懂错在哪里,不懂基本的用法。本文介绍一下我在使用python时如何查找一下基本函数的用法,首先是搜索引擎,百度有时候还是有点不行,都是很类似的回答,可能都是错的,他们也不说清楚怎么写的代码,每一句话的含义,用google又要翻墙,网速不行的话非常煎熬。python最强的学习方法就是阅读源代码,帮助手册也很有用处。不想看源代码可以用help(类名)快速看到类的变量和方法。
Python 寻求帮助dir,help
dir用于列出python对象所有的方法,help查询方法具体描述
如何写一封彬彬有礼的英文email给国外学者
鉴于好多伙伴向我询问如何写英文email,所以我的第一篇技术文章选择写擅长的,如何写一封有礼貌的寻求帮助的英文信函。先总结要点,后上例子: 给国外的学者写信,一定要记得: 1.礼貌,礼貌,礼貌...!再怎么客气都不为过。 2.简明扼要,直述问题和想要他们如何帮助你。 3.得到回应后要感谢帮助,适当的恭维。 以下例子是我的一些经验,分享给大家,希望采用的伙伴们,如果有幸帮到你,请不
Linux下寻求帮助
1.      内部命令:如echo等,属于shell提供,在shell内部;外部命令,如ls等,shell不提供但可以调用。 2.      echo既有内部命令又有外部命令,其中外部命令在/bin/echo下。内部命令可以用help查询运行方法,如help echo,但是外部命令不可以。 3.      外部命令改名后无法调用,如mv /bin/ls /bin/lls后,ls命令不可用,但
C# 调用C/C++ Dll(参数含char*指针,返回char*指针)
动态库: //MyPointDll.h extern"C" _declspec(dllexport) char* strcpyTest(char* dest,char* sour);
JAVA调用C#webservice,返回byte[],写入新文件
JAVA调用C#webservice,返回byte[],写入新文件 package com.company; import java.io.*; import java.rmi.RemoteException; import java.util.Base64; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterM