我认为模块化是正确的术语;举一个基本的例子,如果我要创建一个加密应用程序,你可以像记事本一样输入它,然后加密保存,但是在保存菜单下有一些选项可以保存你有 AES、Blowfish 等插件的加密方法,并且还允许将新方法编码到插件中并进行分发,而无需重新编译主应用程序。
我在网上找到了一些解释,但我主要是在努力了解如何让原本不存在的保存菜单下出现新选项(这可能更多是 Windows 应用程序问题) ,如果你明白我的意思。
鉴于模块化开发似乎非常特定于平台,我现在将坚持使用 Windows 示例,并希望在那之后尝试并确定范围。
最佳答案
假设使用 Win32api,您可以执行如下操作:
- 为您的应用程序准备一个插件目录。
- 加载您的应用程序时,列出该目录中的所有文件
- 任何具有扩展 DLL 的文件,您都可以使用 LoadLibrary 加载打电话。
- 您从 dll 中获得一些信息,告诉您插件的名称是什么
- 您适本地创建菜单/用户界面更改。
现在,当您创建您的 dll 时,您拥有一组所有插件通用的标准函数。或者,每种插件的一组标准函数和一个用您的应用程序标识它的函数。这样,您可以测试每个插件的形式是否正确,并即时调用动态库中的方法,而无需将它们编译/链接到您的主程序。
例程在任何支持共享库(DLL 等)的平台上都大体相似。
作为我的意思的代码示例,您可能有一个像这样的 plugin.h 文件:
#ifndef PLUGIN_H_
#define PLUGIN_H_
#define PLUGIN_CRYPTO 1
#define PLUGIN_FORMAT 2
#define PLUGIN_EXAMPLE 3
#endif
然后你在你的主程序和你创建的任何插件中#include这个头文件。在 plugin-dll.cpp(又是一个例子)中,你有一个这样的方法:
int GetPluginType()
{
return PLUGIN_CRYPTO;
}
然后您可以在该函数的结果之间切换,并将函数指针分配给您要运行的正确例程。
实现的更多信息:
- GetProcAddress () - 在库中查找函数的名称。包含函数指针的示例。
- FreeLibary - 释放使用 LoadLibrary 打开的内容。
- FindFirstFileEx , FindNextFile和 CloseFind用于目录搜索。
只是因为,Linux (POSIX) 等价物:
关于c++ - C/++ 中的简单模块化指南?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2293404/