我有一个directShow过滤器:MyFilter.ax
当我尝试使用Regsvr32实用程序注册MyFilter.ax时,它不会出现任何错误或任何消息(成功或失败).但是过滤器未注册.
Regsvr32实用程序适用于我的其他过滤器.
为什么Regsvr32 deoes不给出任何成功或失败的消息?如何调试我的Regsvr32故障成功?用于注册directshow过滤器的任何替代实用程序可能会给出有意义的消息?
最好的祝愿
更新:
我在虚拟机上安装了干净的win7操作系统.然后再次尝试register.Fail而没有来自regsvr32的消息响应.
但是再在虚拟机上安装一个干净的win7操作系统.然后进行所有更新.在我进行更新后,regsvr32工作并安装我的过滤器....我不知道是什么原因导致regsvr32失败以及什么样的更新修复它.或者它真的是一个更新问题......
如何在vc ++中将'System :: String ^'转换为'const char*'?
我的代码:
String ^Result1= "C:/Users/Dev/Desktop/imag.jpg";
IplImage *img1 = cvLoadImage(Result1, 1);
如果我喜欢上面它会产生以下错误.
error C2664: 'cvLoadImage' : cannot convert parameter 1 from 'System::String ^' to 'const char *'
请帮我.
我一直在尝试用c#制作一个示例网络摄像头应用程序,我发现应用程序无法在Skype或Oovoo或任何其他应用程序运行的同时运行?(反之亦然)为什么应用程序会在网络上获得独占锁定
我正在尝试使用ffmpeg库从图像创建视频.图像的大小为1920x1080,应该使用.mkv容器用H.264编码.我遇到了各种各样的问题,以为我越来越接近解决方案了,但是这个我真的被困在了.使用我使用的设置,我的视频中的前X帧(大约40帧,取决于我用于视频的图像数量)不会被编码.avcodec_encode_video2不会返回任何错误(返回值为0),其中got_picture_ptr = 0.结果是视频实际上看起来像预期的那样,但是前几秒是奇怪的跳跃.
这就是我创建视频文件的方式:
// m_codecContext is an instance variable of type AVCodecContext *
// m_formatCtx is an instance variable of type AVFormatContext *
// outputFileName is a valid filename ending with .mkv
AVOutputFormat *oformat = av_guess_format(NULL, outputFileName, NULL);
if (oformat == NULL)
{
oformat = av_guess_format("mpeg", NULL, NULL);
}
// oformat->video_codec is AV_CODEC_ID_H264
AVCodec *codec = avcodec_find_encoder(oformat->video_codec);
m_codecContext = avcodec_alloc_context3(codec);
m_codecContext->codec_id = oformat->video_codec;
m_codecContext->codec_type = AVMEDIA_TYPE_VIDEO;
m_codecContext->gop_size = 30;
m_codecContext->bit_rate = width * height * 4
m_codecContext->width = width; …Run Code Online (Sandbox Code Playgroud) 我有一个要求,我认为我有一个解决方案,但我会很感激输入,以防我错过了什么或让自己失败了.
要求
在新库(使用C#)中实现一些新的业务逻辑,通过事件报告其状态.该库将从现有的VBA解决方案中调用(但不能改变它).该库通过COM Interop暴露给VBA - 这里没有问题.
除了这个新库公开的"基础"功能之外,我还需要允许基本功能被"自定义"功能取代.
基本和自定义功能都将实现相同的接口,但由于各种原因,每个接口的内部私有方法都会有所不同.
在VBA中
我需要能够调用基本库或自定义库(以及将来实现相同接口的其他自定义库).如果不是要求响应并显示来自库的消息,我可以使用Late Binding在运行时实例化对象.但是,由于我需要响应库引发的事件,因此WithEvents在VBA中声明变量时需要使用关键字.
如果我只需要支持基础库,我可以执行以下操作:
Private WithEvents Processor As MyDefault.RuleEngine
Public Sub Execute(StartDate As Date, EndDate As Date, SomeOtherParms As String)
Set Processor = New MyDefault.RuleEngine
Processor.Execute StartDate, EndDate, SomeOtherParms
End Sub
Private Sub Processor_OnProgressUpdate(ByVal percentComplete As Double)
'Show the progress on the UI to the user
End Sub
Run Code Online (Sandbox Code Playgroud)
由于我要支持这个库的定制实现(其中有一些关于我现在知道了,别人说我还不知道),我会想用后期绑定来处理这种情况.
但是,WithEvents不能与Late Binding一起使用,尽管我可能偶然发现了一种解决方法.
在我的场景中,我将始终引用基础实现.它只能在特定的配置环境下,其中基本功能将被自定义实现替换.
由于基本和自定义库共享相同的接口,因此我在概念验证中使用以下代码:
Private WithEvents Processor As MyDefault.RuleEngine
Public Sub Execute(StartDate As Date, EndDate …Run Code Online (Sandbox Code Playgroud) 我正在编写一个工具,可以找到适用于Mac和Windows的iTunes资料库的丢失文件.在Mac上,我可以通过使用精彩的"CatalogSearch"功能命名来快速查找文件.
但是,在Windows上,似乎没有用于按文件名搜索的OS API(或者是否存在?).
经过一些谷歌搜索,我了解到有一些工具(如TFind,Everything)直接读取NTFS目录并扫描它以按名称查找文件.
我想做同样的事情,但不必从头开始(虽然我过去写了很多磁盘工具,但我从来没有精力去挖掘NTFS).
我想知道是否有现成的库,可能是.dll,它会给我这个搜索功能:传入一个文件名,回到它的路径.
或者,Windows索引服务怎么样?至少当我在最近安装的XP Home系统上尝试此操作时," 开始"菜单下的" 搜索"操作实际上会扫描所有目录,这表明它没有完整的数据库.由于我根本不是Windows用户,我想知道为什么这不起作用.
最后,我需要的完整解决方案是:我有一个要查找的文件名列表,我需要搜索整个磁盘的代码(或者使用数据库)来一次性获取所有结果.例如,搜索不应该为我正在查找的每个文件启动新的完整扫描.这就是为什么我认为MFT方式是最优的,因为它可以快速迭代所有名称,将每个名称与我的列表进行比较.
在查看一个非常相似的问题并看到几乎相同的代码后,我决定分别提出这个问题.我想在DirectShow使用的默认窗口中显示网络摄像头视频流的视频预览,并且我还希望能够在任何给定时刻"拍摄"视频流.
我从MSDN上的DirectShow示例以及AMCap示例代码开始,并且我认为应该预览部分,但不是.我没有找到从视频流中抓取图像的例子,除了使用SampleGrabber,它已被弃用,因此我试图不使用它.
下面是我的代码,换行.请注意,EnumerateCameras中的大多数代码都已注释掉.该代码将用于附加到另一个窗口,我不想这样做.在MSDN文档中,它明确指出VMR_7创建自己的窗口来显示视频流.我的应用程序中没有错误,但此窗口永远不会出现.
我的问题是:我做错了什么?或者,如果您知道我想要做的一个简单示例,请将我链接到它.AMCap不是一个简单的例子,仅供参考.
注意:InitalizeVMR用于在无窗口状态下运行,这是我的最终目标(集成到DirectX游戏中).但是现在,我只想让它以最简单的方式运行.
编辑:此问题的第一部分,即预览相机流,已解决.我现在只是在寻找已弃用的SampleGrabber类的替代品,以便我可以随时拍摄照片并将其保存到文件中.
编辑:在谷歌搜索了近一个小时后,一般的共识似乎是你必须使用ISampleGrabber.如果您发现任何不同,请告诉我.
测试代码(main.cpp):
CWebcam* camera = new CWebcam();
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
MessageBox(NULL, L"text", L"caption", NULL);
if (SUCCEEDED(hr))
{
camera->Create();
camera->EnumerateCameras();
camera->StartCamera();
}
int d;
cin >> d;
Run Code Online (Sandbox Code Playgroud)
Webcam.cpp:
#include "Webcam.h"
CWebcam::CWebcam() {
HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
//m_pTexInst = nullptr;
//m_pTexRes = nullptr;
}
CWebcam::~CWebcam() {
CoUninitialize();
m_pDeviceMonikers->Release();
m_pMediaController->Release();
}
BOOL CWebcam::Create() {
InitCaptureGraphBuilder(&m_pFilterGraph, &m_pCaptureGraph);
hr = m_pFilterGraph->QueryInterface(IID_IMediaControl, (void **)&m_pMediaController);
return TRUE;
}
void CWebcam::Destroy() {
}
void CWebcam::EnumerateCameras() {
HRESULT hr = …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 2 个视频合成为一个(也是音频)并另存为文件。比如说,在最终视频的左半部分显示源视频,在右侧显示其他源。任何编码都可以。不适用于 DirectShow。
我怀疑 IMFVideoMixerControl 可能与此有关,但不幸的是,我对 MF 太陌生,无法确定要采取的正确步骤来实现这一目标。如果您能给我一些指导,或者网络上有任何示例,请告诉我。感谢您的帮助。
我打开一个端口与设备通信并控制设备,但CreateFile()函数返回INVALID_HANDLE_VALUE.
GetLastError()返回2表示找不到指定的文件.
我的代码如下所示:
wsprintf( szPort, "COM%d", nPort );
m_hIDComDev = CreateFile(szPort,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED,
NULL);
if (m_hIDComDev == INVALID_HANDLE_VALUE)
{
DWORD err=GetLastError();
}
Run Code Online (Sandbox Code Playgroud)
为什么会出现这个问题?
我正在使用外部资源开发 MFC 应用程序。
resource.h 文件已被其他开发人员手动编辑,我已经看到存在冲突的 ID。
我看过 Microsoft TN020: ID Naming and Numbering Conventions。
我只是想知道控件和其他资源(不包括字符串)的 ID 在整个应用程序中是否必须是唯一的,或者如果它们对于每个定义的对话框都是唯一的就足够了。