将 Win32 应用程序转换为对象

Posted

技术标签:

【中文标题】将 Win32 应用程序转换为对象【英文标题】:Convert Win32 Application to Object 【发布时间】:2013-02-06 14:58:19 【问题描述】:

我对 WinAPI 编程很陌生,并且已经编写了一个用于屏幕捕获的 Win32 应用程序。当我运行程序时,光标立即变为十字准线,我可以单击并拖动以捕获屏幕的一部分并将其保存到文件中。

但是,我现在想修改我的程序,使其不包含 main 方法 (WinMain),并且本质上将其转换为对象类而不是应用程序类,以便我可以从其他程序调用函数。我无法找到有关如何执行此操作的良好资源,因为我相信 WinMain 在后台执行特殊功能,因此我不能简单地更改方法的名称。

谁能推荐一些很好的资源或教程来解决这个问题?

【问题讨论】:

【参考方案1】:

有很多方法可以做到这一点,但你的拳头要后退一步:

你如何期望你的“程序”(让我们继续这样调用)被调用? 有哪些参数和返回类型?

那么,你想公开什么样的 API?标题中的 C++ 类?来自静态库的 C++ 类? 从 DLL 导出的 C 函数? COM 对象?

关于库、DLL 或 COM 库的外观有很多示例(只需尝试 google 那些关键字)。

最简单的方法是设置一个库或一个 DLL 项目(大多数 IDE 都有提供空骨架的向导),而不是在其中粘贴您需要保留在那里的相关代码,让它从暴露的地方调用函数或类方法。

只有在你决定了你的“对象”应该具有哪种“形式”之后,才能给出更准确的答案。

【讨论】:

感谢您的回复!好吧,最终我希望我的程序返回一个字符串。它需要接受的唯一参数是需要最小化的窗口的 id 或 HWND。 你打算通过什么方式从另一个程序调用一个程序中的函数?这个决定将决定你下一步走哪条路。 我正在尝试为浏览器编写屏幕捕获插件,它需要本机代码才能捕获任何窗口/屏幕部分,而不仅仅是浏览器窗口。因为我是 Windows 编程的新手,所以我首先将该功能作为一个独立的应用程序来实现以熟悉语法等。我一直在使用 this 来启动 dll 工作。我想在 dll 中有我的屏幕截图(带有它的窗口和 WndProcs),并能够从另一个 c++ 文件中调用它。

以上是关于将 Win32 应用程序转换为对象的主要内容,如果未能解决你的问题,请参考以下文章

在现代 C++ 应用程序中使用 Win32 代码时,是不是应该使用正确的转换?

将 errno.h 错误值转换为 Win32 GetLastError() 等效项

Win32 API - 将 LO/HIWORD 转换为 HANDLE

使用 Win32/MFC 将 HTML 文件转换为 PDF

QT 指针和对象 句柄转换

使用 win32com.client 模块在 Python 中将 .XLSX 转换为 .XLS