我在我的项目中使用纯C和Windows SDK,但现在我需要处理DVR的摄像头,它的驱动程序是在MFC 6.0中制作的。
我可以随时切换到C++ (我已经在一些模块中使用它了),但在这个camera SDK中,我需要CWnd的对象。
//Initialize is a function, which initializes the related SDK instance.
Void Initialize(CWnd* pParent)我能不能不用把MFC加载到MFC项目中,而只是使用我的普通CreateWindowEx()来创建一个假的CWnd?
谢谢。
发布于 2015-04-22 06:58:36
CWnd只是一个窗口句柄的包装器,可能只有SDK函数使用的方法是获取父窗口句柄。你可以尝试破解CWnd的所有继承、分支和依赖,用所有的数据和方法来模拟对象,而不使用实际的MFC,但我猜这将是一个真正的麻烦。你可能不得不创建一些简单的MFC层,比如dll,它将从你的代码中获取HWND句柄,然后将它包装到CWnd中,然后调用camera SDK。您可能需要使用相同版本的VC++ 6.0来创建一个层,以使其与您已有的旧库一起工作。
发布于 2017-08-29 06:11:50
如果SDK有一个接受CWnd参数的函数,那么它可能已经静态链接到MFC了。这意味着您的项目现在依赖于客户端计算机上的MFC dll。既然您现在绑定到了MFC,那么您还不如咬紧牙关创建一个静态链接到MFC的MFC项目。我建议只创建一个简单的控制台MFC项目,并从那里开始工作。
发布于 2019-08-20 16:15:53
如果MFC库中有任何类,则应用程序将依赖于MFC。这是显而易见的。如果必须避免使用MFC库,请使用HWND而不是CWnd,即使用Win32和创建窗口句柄并使用它们。
但是,因为camera SDK使用了CWnd类,所以它已经依赖于MFC了。所以使用MFC dll应该不会有问题。如果要避免使用MFC,可以使用一个中间包装器dll,它可以将HWND转换为CWnd并将其传递给SDK函数。
主要应用:
HWND m_hWnd;中间DLL (资源使用时应正确处理):
void Initialize (HWND hWnd)
//Passing to SDK
Initialize( CWnd::FromHandle(hWnd))https://stackoverflow.com/questions/6553352
复制相似问题