c#进行SDK二次开发时,遇到HWND参数应该这么转?

EuegneChen 2017-12-23 03:07:29
最近在将一个摄像头SDK改成C#的。
遇到一个问题,SDK里面有个函数如下:


想问第二个参数pWnd应该这么转成C#。
有给C++的demo,demo里面时这样调用这个函数的:

s32Ret = HI_SDK_RealPlayExt(lHandle, m_ScreenPannel.m_PlayWnd[u32Chn].GetSafeHwnd(), &struStreamInfo);
//其中的m_ScreenPannel和m_PlayWnd[u32Chn]:
class CSDKDemoDlg : public CDialog{
//...
CScreenPannel m_ScreenPannel;
//...
}

class CScreenPannel : public CWnd{
//...
CPlayWnd m_PlayWnd[25];//ScreenPannel.h里面的
//...
}


在C#里面,我是这样转的

[DllImportAttribute("HISDK.dll", EntryPoint = "HI_SDK_RealPlayExt", CallingConvention = CallingConvention.StdCall)]
public static extern int HI_SDK_RealPlayExt(long lHandle, IntPtr pWnd, ref HI_S_STREAM_INFO_EXT pstruStreamInfo);
s32Ret = HI_SDK_RealPlayExt(lHandle, Pannel1.Handle, ref struStreamInfo);

执行的时候报错:
尝试读取或写入受保护的内存。这通常指示其他内存已损坏。


想请教一下各位大佬,这是什么原因,应该这么解决。系欸邪恶
...全文
277 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 2 楼 EuegneChen 的回复:
[quote=引用 1 楼 xuzuning 的回复:] HWND 就是 Handle 窗口句柄,一个在窗口创建时操作系统指派的无符号长整型数,用于唯一识别这个窗口的标识
我在C#里面将HWND转成了IntPtr类型 Panel1.Handle这样获取的Panel控件的句柄,但是还是报错了[/quote] 别人要窗口handle,你给个panle,各种属性对不上,当然报错了。
EuegneChen 2017-12-23
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
HWND 就是 Handle 窗口句柄,一个在窗口创建时操作系统指派的无符号长整型数,用于唯一识别这个窗口的标识
我在C#里面将HWND转成了IntPtr类型 Panel1.Handle这样获取的Panel控件的句柄,但是还是报错了
xuzuning 2017-12-23
  • 打赏
  • 举报
回复
HWND 就是 Handle 窗口句柄,一个在窗口创建时操作系统指派的无符号长整型数,用于唯一识别这个窗口的标识

110,571

社区成员

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

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

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