C#调用C++dll接收指针

zhangtong_76 2014-04-23 02:24:04
请各位大神多多指教,在C#给C++dll函数传递一张图片,然后再C++函数中处理,之后将处理过的图片传给C#
//这是C++函数,bytes为C#给C++的图片,data是C++需要传给C#的图片
int MyImageChangeDll::MainDll(double desWidth,double desHeigh,BYTE *bytes,INT *len , BYTE *data)

//C#函数
[DllImport("ImageChangeDll.dll")]
public static extern
int MainDll(double desWidth, double desHeigh, Byte[] pObject, ref int len, ref Byte[] data);

DoMain
{
Bitmap bmp = new Bitmap(bmpPath);
MemoryStream ms = new MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
byte[] bytes = ms.GetBuffer();
byte[] data = new byte[415801+10];
byte[] data1 = new byte[100];
MainDll(420, 330, bytes, ref len, ref data);
}

在C#中这样接收对不对,运行到MainDll函数时,data为什么接收不到C++传来的值?
...全文
158 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xzweihe 2014-04-23
  • 打赏
  • 举报
回复
没有分数 借楼主的帖子发个求助 VC的接口 Bool GetKeyPadStatus( byte * addr, char * pstatus, char * pnumber,byte* ptocounter); C# 调用 [DllImport("KeyPad.dll", CallingConvention = CallingConvention.StdCall)] public static extern bool GetKeyPadstatus(ref byte addr, ref string pstatus, ref string pnumber, ref byte ptocounter); //获取终端状态函数 调用函数 byte address1 = 1; //byte address2 = 2; string pstatus = "0"; //////////这个值 string pnumber = "0000"; byte mtocounter = 0;// bool temp = calldll.GetKeyPadstatus(ref address1, ref pstatus, ref pnumber, ref mtocounter); if (temp) { switch (pstatus[0]) { case '0': label7.Text = "怎么是0 零 没有获得呼叫器的状态值"; break; case 'L': label7.Text = "空闲状态,按了清除键了"; break; case 'E': label7.Text = "暂停状态,按了暂停键"; break; case 'W': label7.Text = "等待" + pnumber; break; case 'P': label7.Text = "呼叫" + pnumber; //重复呼叫 CallAndPrint(); break; case 'M': label7.Text = "转移" + pnumber + "到" + mtocounter.ToString() + "窗口"; break; case 'S': label7.Text = "正在受理" + pnumber; break; case 'U': label7.Text = "呼叫器要求派号"; byte waitnum = 100; //等待人数 calldll.setKeyPadnumber(ref address1, ref pnumber, waitnum); Thread.Sleep(120); CallAndPrint(); break; } } 最后获取的pstatus 值 是 0 也就是我开始刚给他的赋值
zhangtong_76 2014-04-23
  • 打赏
  • 举报
回复

//C#给C++的bytes数组,在C++已经成功接收并且处理了;这个data是C++返回给C#的图片,C#接收不成功
IplImage plmg = IplImage(desImg);
char *data1 = plmg.imageData;
*len = strlen(data1);
data=(BYTE*)data1;
Saleayas 2014-04-23
  • 打赏
  • 举报
回复
首先,写出 C++ 是如何调用这个和传递指针的。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧