某公司提供了一套摄像头接口,C++的,现在要用WinForm实现实时监控。
其中有一个方法,定义为
int function_1(long _hwnd);
参数为一个控件的句柄。这个方法的目的是将传入的这个句柄所对应的控件进行一下处理。
这个方法在他提供的C++做的Demo中是好使的。
现在我在C#中调用:
[DllImport("DLL\\xxx.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern string function_1(Int32 _control);
//调用
IntPtr intptr = textBox1.Handle;
function_1(intptr.ToInt32()); //这里报错了
错误信息:尝试读取或写入受保护的内存,这通常指示其他内存已损坏。
网上找了很多方法,都不管用,比如参数类型用IntPtr 或者ref IntPtr、long等等,都不管用。
哪位大神有解决方案?
还有我想知道,C++控件的句柄和C#的句柄是不是因该是一个概念?都应该是一种指针?如果C#窗体的控件需要传递到C++的DLL中去处理,应该如何做?