c++ - C/++ 中的简单模块化指南?

标签 c++ windows modular

我认为模块化是正确的术语;举一个基本的例子,如果我要创建一个加密应用程序,你可以像记事本一样输入它,然后加密保存,但是在保存菜单下有一些选项可以保存你有 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;
}

然后您可以在该函数的结果之间切换,并将函数指针分配给您要运行的正确例程。

实现的更多信息:

只是因为,Linux (POSIX) 等价物:

  • dlopen - 动态库打开。
  • dlsym - 等效于 GetProcAddress - 获取符号名称的函数指针。
  • dlclose - 相当于 FreeLibrary

关于c++ - C/++ 中的简单模块化指南?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2293404/

相关文章:

c - 对“[function]”的 undefined reference

c++ - 加载难看的输入

c++ - 您使用什么模式来分离 C++ 中的接口(interface)和实现?

c++ - 在 Qt 类实例中访问(非指针)成员变量时出现段错误

windows - 如何在 Windows/DOS 上捕获 stderr?

windows - 在使用 CredSSP 身份验证能够运行无人值守命令时,是否有任何方法可以绕过凭据提示?

types - Ada——什么是模块化类型

c++ - 预期 `__asm` 语句中的表达式

windows - 无法加载 OpenGL 进程,只能从 Haskell 加载

javascript - 模块化JS : Onclick checkbox => enable radio buttons for more options - What is the right way doing this using modular js?