簡體   English   中英

C / ++中簡單的模塊化指南?

[英]Simple modular guide in C/++?

我認為模塊化是正確的說法; 舉一個基本的例子,如果我要創建一個加密應用程序,您可以像記事本一樣鍵入,然后保存加密,但是在保存菜單下,有一些選項可以保存加密方法,例如AES,Blowfish等插件。 ,還允許將新方法編碼到插件中並進行分發,而不必重新編譯主應用程序。

我在網上找到了一些解釋,但是我主要是想讓您知道如何使新選項出現在最初不存在的保存菜單下(這可能是Windows應用程序的問題),如果您明白我的意思。

看到模塊化開發似乎是特定於平台的,我現在將繼續使用Windows示例,並希望在此之后嘗試擴大范圍。

假設使用Win32api,您將執行以下操作:

  • 為您的應用程序創建一個插件目錄。
  • 加載應用程序時,列出該目錄中的所有文件
  • 任何帶有擴展DLL的文件,都可以通過LoadLibrary調用加載。
  • 您會從dll中獲得一些信息,該信息告訴您插件的名稱是什么
  • 您適當地創建菜單/ ui更改。

現在,當您創建dll時,便擁有了所有插件共有的一組標准功能。 或者,每種插件類型的標准功能集和一個可以在您的應用程序中識別此功能的功能。 這樣,您可以測試每個插件的格式正確,並在運行時動態調用動態庫中的方法,而無需將它們編譯/鏈接到您的主程序中。

該例程在支持共享庫(DLL等)的任何平台上大致相似。

作為我的意思的代碼示例,您可能具有如下的plugin.h文件:

#ifndef PLUGIN_H_
#define PLUGIN_H_

#define PLUGIN_CRYPTO   1
#define PLUGIN_FORMAT   2
#define PLUGIN_EXAMPLE  3

#endif 

然后,在主程序和您創建的所有插件中都包含此標頭。 在plugin-dll.cpp(再次示例)中,您具有如下方法:

int GetPluginType()
{
    return PLUGIN_CRYPTO;
}

然后,您可以在此函數的結果之間切換,並將函數指針分配給要運行的正確例程。

更多實現的信息:

正因為如此,Linux(POSIX)等效項:

  • dlopen-動態庫打開。
  • dlsym-等效於GetProcAddress-將函數ptr轉換為符號名稱。
  • dlclose-等同於FreeLibrary

Windows包含一個名為ModifyMenu的函數,該函數可讓您在運行時插入,刪除和重新排列菜單項。 越是困難(雖然不是一個很大的難度)部分是連接東西了,因此菜單條目實際上調用了補時的功能。

選擇菜單項時,包含特定編號的消息將發送到程序。 常規的C程序將具有很大的switch語句,以根據該數字決定要做什么。 對於在運行時添加的插件,您不能使用switch語句,因此通常使用某種映射結構代替。

除了Jerry對在運行時填充菜單的說明之外,您可能還必須掃描設置的文件夾(例如Application Folder \\ plugins)以查找將提供某些功能(例如加密/解密和plugin_name等)的新dll文件。Windows具有用於在運行時在DLL文件中查找內容。

如果您編寫的是c#,則可以使用MEF http://www.codeplex.com/MEF

而且您確實應該在C#中執行此操作,只有真正的受虐狂才可以在C ++中編寫這種GUI客戶端程序(為了燃燒起見)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM