dll里面的参数是IntPtr类型,在C#里面传递一个new的IntPtr类型给它,会报错“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”
dll里面:CaptureFromUSB(uint enHandle, IntPtr pBuffer, int srcWidth, int srcHeight);
CallBackAction(IntPtr pRGBBuf, int imgWidth, int imgHeight)里面调用CaptureFromUSB函数,
Form里面调用:
IntPtr pnt = new IntPtr(2121);//不知道对不对
CallBackAction(pnt, 320, 240);//这里调用过去就报错
想读取数据流,然后转换为图片,谢谢
6 个解决方案
#1
没有分配空间,RGBBuf 是数组吗
int[] RGBBuf = new int[1000];
IntPtr pRGBBuf = Marshal.UnsafeAddrOfPinnedArrayElement(RGBBuf, 0);
#2
pRGBuf是指针IntPtr,在dll的函数原型里看到的,但是它的作用是保存数据,我不能改dll,只能去调用,不知道要传什么参数过去
#3
指针不是你自己创建的,一般是创建其他类带来的。
例如:TextBox TB= new TextBox();
IntPtr Handle = TB.Handle;
DllFunction(Handle, "xxx");
例如:TextBox TB= new TextBox();
IntPtr Handle = TB.Handle;
DllFunction(Handle, "xxx");
#4
谢谢,但是应该不能随便传一个窗口或者panel的句柄过去吧?这个指针是要保存获得的数据的,我不知道要怎么传参
#5
把你得到的数据保存在Byte[]里传过去,但在PInvoke的时候要给DllImport进来的Function加一些Attribute,具体加什么样的Attribute,你要看原来的DLL的源码,没有源码就多试几种,总能找到合适的。
#6
int转IntPtr
int i = 12;
IntPtr p = new IntPtr(i);
IntPtr转int
int myi = (int)p;
MessageBox.Show(myi.ToString());
IntPtr是指针
int i = 12;
IntPtr p = new IntPtr(i);
IntPtr转int
int myi = (int)p;
MessageBox.Show(myi.ToString());
IntPtr是指针
#1
没有分配空间,RGBBuf 是数组吗
int[] RGBBuf = new int[1000];
IntPtr pRGBBuf = Marshal.UnsafeAddrOfPinnedArrayElement(RGBBuf, 0);
#2
pRGBuf是指针IntPtr,在dll的函数原型里看到的,但是它的作用是保存数据,我不能改dll,只能去调用,不知道要传什么参数过去
#3
指针不是你自己创建的,一般是创建其他类带来的。
例如:TextBox TB= new TextBox();
IntPtr Handle = TB.Handle;
DllFunction(Handle, "xxx");
例如:TextBox TB= new TextBox();
IntPtr Handle = TB.Handle;
DllFunction(Handle, "xxx");
#4
谢谢,但是应该不能随便传一个窗口或者panel的句柄过去吧?这个指针是要保存获得的数据的,我不知道要怎么传参
#5
把你得到的数据保存在Byte[]里传过去,但在PInvoke的时候要给DllImport进来的Function加一些Attribute,具体加什么样的Attribute,你要看原来的DLL的源码,没有源码就多试几种,总能找到合适的。
#6
int转IntPtr
int i = 12;
IntPtr p = new IntPtr(i);
IntPtr转int
int myi = (int)p;
MessageBox.Show(myi.ToString());
IntPtr是指针
int i = 12;
IntPtr p = new IntPtr(i);
IntPtr转int
int myi = (int)p;
MessageBox.Show(myi.ToString());
IntPtr是指针