最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實現(xiàn)簡單插件機制原理解析

 更新時間:2021年02月19日 09:28:44   作者:kiven.li  
這篇文章主要介紹了C++實現(xiàn)簡單插件機制原理解析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

  在我做的第一個頁游項目中,服務(wù)器使用了插件的機制,但是當(dāng)時的插件都是用C#寫,而且如何實現(xiàn)的也不是很清楚。之后的幾個頁游項目都是自己一個人包攬服務(wù)器部分,所以一直沒有寫插件的需求。下一個頁游項目服務(wù)器這邊需要多人合作,因此我想把其他模塊都獨立的做成插件的模式,目前也是在探索階段。通過網(wǎng)上資料查找以及自己的整理,實現(xiàn)了一個簡單版本的插件機制。實現(xiàn)代碼如下:

  文件Object.hpp中實現(xiàn)了所有插件類的基類,所有插件都要繼承該類。

#ifndef    __OBJECT_HPP__
#define    __OBJECT_HPP__

class Object
{
public:
  Object() {}
  virtual ~Object() {}
  virtual int Dump() = 0;
};

#endif    //__OBJECT_HPP__

  文件TestObject.hpp以及TestObject.cpp是插件的實現(xiàn)類。

#ifndef    __TESTOBJECT_HPP__
#define    __TESTOBJECT_HPP__

#include  "Object.hpp"

class TestObject : public Object
{
public:
  virtual int Dump();
};

#endif    //__TESTOBJECT_HPP__
#include  "TestObject.hpp"
#include  <iostream>

extern "C"
{
  void *Instance()
  {
    return new TestObject;
  }
}

int TestObject::Dump()
{
  std::cout << "class name:TestObject  function name:Dump()" << std::endl;
  return 0;
}

  文件main.cpp中加載和使用了插件,如果更深入一點的話這里可以寫一個插件管理的類,專門負(fù)責(zé)插件的注冊、對象的生成等工作。目前只為了演示功能故未做進一步研究。

#include  <dlfcn.h>
#include  <iostream>
#include  "Object.hpp"

typedef Object *Instance();

int main()
{
  void *handle = dlopen("./libto.so", RTLD_LAZY);
  if(!handle)
  {
    std::cout << dlerror() << std::endl;
    return 1;
  }

  Instance *GetInstance = (Instance *)dlsym(handle, "Instance");
  if(!GetInstance)
  {
    std::cout << "Error Instance function" << std::endl;
    return 1;
  }

  Object *obj = GetInstance();
  if(0 != obj)
  {
    obj->Dump();
  }

  delete obj;
  dlclose(handle);

  return 0;
}

  最后是makefile文件。

SOURCE=TestObject.cpp
makeso:${SOURCE}
  g++ -fPIC -shared $^ -o libto.so

main:
  g++ -o main -ldl main.cpp

clean:
  rm -rf main *.o *.so

all:makeso main

  程序的編譯方式很簡單,只要make all就可以了。運行過程如下:

[kiven@localhost plugin]$ make all
g++ -fPIC -shared TestObject.cpp -o libto.so
g++ -o main -ldl main.cpp
[kiven@localhost plugin]$ ./main
class name:TestObject  function name:Dump()
[kiven@localhost plugin]$

  整個程序都很簡單,其中Object.hpp main.cpp兩個文件是主程序,即游戲服務(wù)器的框架中要實現(xiàn)的功能。TestObject.hpp、TestObject.cpp是插件的具體實現(xiàn),可以理解為具體游戲模塊的實現(xiàn)。這里實現(xiàn)的插件機制是個雛形,只能用來演示功能,具體要用到游戲服務(wù)器中時插件還需要訪問到主程序中的類,對象以及方法等。

到此這篇關(guān)于C++實現(xiàn)簡單插件機制原理解析的文章就介紹到這了,更多相關(guān)c++插件機制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • EasyC++全局變量

    EasyC++全局變量

    這篇文章主要介紹了EasyC++全局變量
    2021-12-12
  • 學(xué)好C++必須做到的50條 絕對經(jīng)典!

    學(xué)好C++必須做到的50條 絕對經(jīng)典!

    學(xué)好C++必須做到的50條,絕對經(jīng)典!想要學(xué)好C++的朋友一定要認(rèn)真閱讀本文,更要做到以下50條
    2016-09-09
  • 詳解C語言中動態(tài)內(nèi)存管理

    詳解C語言中動態(tài)內(nèi)存管理

    這篇文章主要為大家詳細(xì)介紹了C語言中動態(tài)內(nèi)存管理的相關(guān)知識,以及常見的動態(tài)內(nèi)存的錯誤,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-07-07
  • C++使用fdk-aac實現(xiàn)將音頻PCM編碼成aac

    C++使用fdk-aac實現(xiàn)將音頻PCM編碼成aac

    mp4的音頻流通常是aac編碼,我們做音視頻采集的時候就需要將,采集的音頻PCM編碼成aac,本文就來為大家介紹一下C++如何使用fdk-aac實現(xiàn)將音頻PCM編碼成aac吧
    2023-11-11
  • C語言轉(zhuǎn)義字符實例詳解

    C語言轉(zhuǎn)義字符實例詳解

    這里主要介紹了C語言的轉(zhuǎn)義字符的知識,并附有示例代碼,以便理解,希望對學(xué)習(xí) C語言的同學(xué)有所幫助
    2016-07-07
  • C語言項目小學(xué)生數(shù)學(xué)考試系統(tǒng)參考

    C語言項目小學(xué)生數(shù)學(xué)考試系統(tǒng)參考

    今天小編就為大家分享一篇關(guān)于C語言項目小學(xué)生數(shù)學(xué)考試系統(tǒng)參考,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Qt如何通過pos()獲取坐標(biāo)信息

    Qt如何通過pos()獲取坐標(biāo)信息

    這篇文章主要給大家介紹了關(guān)于Qt如何通過pos()獲取坐標(biāo)信息的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用qt具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • Qt開發(fā)實現(xiàn)跨窗口信號槽通信

    Qt開發(fā)實現(xiàn)跨窗口信號槽通信

    這篇文章主要為大家詳細(xì)介紹了Qt開發(fā)實現(xiàn)跨窗口信號槽通信,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++面試八股文之智能指針詳解

    C++面試八股文之智能指針詳解

    智能指針是C++11引入的類模板,用于管理資源,行為類似于指針,但不需要手動申請、釋放資源,本文主要為大家介紹了它的相關(guān)知識,需要的可以參考一下
    2023-06-06
  • qt5之QFile讀寫文件功能詳解

    qt5之QFile讀寫文件功能詳解

    這篇文章主要為大家詳細(xì)介紹了qt5之QFile讀寫文件功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評論

吉木乃县| 榆中县| 临夏市| 自治县| 宜兴市| 高邮市| 绥滨县| 大关县| 邵阳市| 阿鲁科尔沁旗| 赤峰市| 邢台县| 永登县| 灵山县| 吴旗县| 西畴县| 哈密市| 林口县| 江油市| 陈巴尔虎旗| 江油市| 西藏| 苍溪县| 怀来县| 长沙市| 宁强县| 比如县| 建昌县| 大名县| 兴海县| 临夏县| 县级市| 无为县| 光泽县| 阆中市| 石首市| 宣城市| 兰州市| 山东省| 灌南县| 得荣县|