C#面板/图像盒故障
我在用C++/C#开发解决方案时遇到困难。 我有一个由Windows服务管理的DLL和一个通过WCF和套接字与此服务通信的用户应用程序。 DLL管理一个视频捕获板,它有一个函数,可以在窗口句柄(从picturebox或面板)中写入它捕获的视频 我试图做的是:创建一个picturebox,并通过WCF将句柄传递给使用此句柄调用DLL函数startpreview的服务 问题是:当我以用户应用程序的形式运行服务进程时,一切正常,但当我以Windows服务的形式运行时,startpreview函数不会写入我的句柄 有人知道我该怎么解决这个问题? 致以最良好的祝愿 @编辑 此代码创建picturebox并附加到flowlayoutpanel。 这在通过WCF(WCFVideoMethods.ClientStartPreview)与服务通信的用户应用程序中执行 这是在服务上执行的StartPreview方法C#面板/图像盒故障,c#,c++,wcf,dll,handle,C#,C++,Wcf,Dll,Handle,我在用C++/C#开发解决方案时遇到困难。 我有一个由Windows服务管理的DLL和一个通过WCF和套接字与此服务通信的用户应用程序。 DLL管理一个视频捕获板,它有一个函数,可以在窗口句柄(从picturebox或面板)中写入它捕获的视频 我试图做的是:创建一个picturebox,并通过WCF将句柄传递给使用此句柄调用DLL函数startpreview的服务 问题是:当我以用户应用程序的形式运行服务进程时,一切正常,但当我以Windows服务的形式运行时,startpreview函数不会写
public Boolean StartPreview(int posNo, IntPtr _handle, Rectangle _rect, Boolean _ovl, int _format, int _rate, Boolean isAudioActive)
{
Boolean ret = true;
int channel = GetPosChannel(posNo);
if (!startPrev(channel, _handle, _rect, _ovl, _format, _rate))
{
ret = false;
}
if (isAudioActive)
{
if (!startAudioPrev(channel))
{
ret = false;
}
}
return ret;
}
StestPrimv(我需要写入句柄的方法)是C++ DLL方法的委托,我没有访问代码……/P>< P>您不能从Windows服务与桌面交互…远远不够。有一个“与桌面交互”选项,您可以在服务的“属性”窗口中设置它,但这有点古怪
我可以建议的另一种方法是,在服务中将图片缓冲区排队,并通过wcf/sockets公开api,以先进先出的方式发送缓冲区。在您的应用程序上,您可以有一个计时器,它将获取这些缓冲区并将它们呈现在您的图片框中显示一些示例代码,以便其他人能够理解您的问题,并得到正确的答案?是否要为windows服务添加GUI?否。很快,我想将服务写入windows窗体句柄。那么windows窗体句柄是由服务创建的吗?或从客户端程序传递?从客户端程序传递。服务通过客户端中调用的WCF方法接收句柄。其中一个参数是句柄。
public Boolean StartPreview(int posNo, IntPtr _handle, Rectangle _rect, Boolean _ovl, int _format, int _rate, Boolean isAudioActive)
{
Boolean ret = true;
int channel = GetPosChannel(posNo);
if (!startPrev(channel, _handle, _rect, _ovl, _format, _rate))
{
ret = false;
}
if (isAudioActive)
{
if (!startAudioPrev(channel))
{
ret = false;
}
}
return ret;
}