C#调用dll函数,IntPtr如何作参数传递

时间:2022-08-29 20:48:45
怎么传递IntPtr的 
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");

#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是指针

#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");

#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是指针