VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 632|回复: 2

[求助] C++写DLL,怎么接收C#返回在byte[]??求帮助

[复制链接]
53_avatar_middle
在线会员 发表于 2016-1-16 11:58:07 | 显示全部楼层 |阅读模式
3驿站币
下面是C#的代码

  1. static IntPtr sendDataFun(IntPtr buf, int len)
  2. {
  3.        byte[] buffer = new byte[len];
  4.        Marshal.Copy(buf, buffer, 0, len);
  5.       //此处是各种处理。。省略
  6.       
  7.       //获取buffer字节数组的内存地址
  8.       IntPtr pin = GCHandle.ToIntPtr(GCHandle.Alloc(buffer));
  9.       return pin;//把内存地址返回给DLL
  10. }
复制代码



这里是C++的代码,问题就在这里

  1. //这行前面的void* 类型可以接收C#返回字节数组指针IntPtr类型吗?
  2. typedef void* (WINAPI *mhook_func)(char* buf, int len);//这个结构就是下面_msend函数的

  3. int WINAPI send(const char *buf, int len)
  4. {
  5.     char *temp = new char[len];
  6.     memcpy_s(temp, len, buf, len);

  7.     //_msend就是C#的委托函数(sendDataFun),先将temp和len发送给C#的处理,再返回字节数组,再转成 char *
  8.     char * aa =(char *)_msend(temp, len);//这里要怎么做才能把C#返回的IntPtr指针内容读取并转成char *
  9.     //重点在这一部分。怎么实现我要的功能
  10.      
  11.     //第一个参数aa就是上面上行从C#返回的字节数组的char *
  12.     int ret = g_trueSend(aa, len);
  13.     delete temp;
  14. }
复制代码





上一篇:如何利用DEV C++中的窗体程序显示网页内容
下一篇:谁有fiddler发我一份
51_avatar_middle
online_admins 发表于 2016-1-18 09:25:56 | 显示全部楼层
具体楼主可以先接收一下看看,到底接收过来的缓冲区里面到底是什么东西?
之后再做分析,这种跨语言的数据交互得调试调试看看了
83_avatar_middle
在线会员 发表于 2016-1-19 17:01:33 | 显示全部楼层
我也准备学习C#做WEB。  学习下。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-4-23 10:56

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表