欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

  在我做的第一個頁游項目中,服務器使用了插件的機制,但是當時的插件都是用C#寫,而且如何實現(xiàn)的也不是很清楚。之后的幾個頁游項目都是自己一個人包攬服務器部分,所以一直沒有寫插件的需求。下一個頁游項目服務器這邊需要多人合作,因此我想把其他模塊都獨立的做成插件的模式,目前也是在探索階段。通過網(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中加載和使用了插件,如果更深入一點的話這里可以寫一個插件管理的類,專門負責插件的注冊、對象的生成等工作。目前只為了演示功能故未做進一步研究。

#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兩個文件是主程序,即游戲服務器的框架中要實現(xiàn)的功能。TestObject.hpp、TestObject.cpp是插件的具體實現(xiàn),可以理解為具體游戲模塊的實現(xiàn)。這里實現(xiàn)的插件機制是個雛形,只能用來演示功能,具體要用到游戲服務器中時插件還需要訪問到主程序中的類,對象以及方法等。

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

相關文章

  • xxx_cast類型轉(zhuǎn)換的實現(xiàn)方法

    xxx_cast類型轉(zhuǎn)換的實現(xiàn)方法

    下面小編就為大家?guī)硪黄獂xx_cast類型轉(zhuǎn)換的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C++常量詳解一(常量指針與常量引用的初始化)

    C++常量詳解一(常量指針與常量引用的初始化)

    這篇文章主要介紹了C++常量詳解一(常量指針與常量引用的初始化),需要的朋友可以參考下
    2017-06-06
  • C++實現(xiàn)紅黑樹核心插入實例代碼

    C++實現(xiàn)紅黑樹核心插入實例代碼

    紅黑樹是一種二叉搜索樹,但在每個結(jié)點上增加一個存儲位表示結(jié)點的顏色,可以是Red或Black,下面這篇文章主要給大家介紹了關于C++實現(xiàn)紅黑樹核心插入的相關資料,需要的朋友可以參考下
    2023-06-06
  • C++中ctemplate的使用

    C++中ctemplate的使用

    CTemplate是一種簡單但功能強大的模板引擎,廣泛用于各種HTML模板解析和生成,本文主要介紹了C++中ctemplate的使用,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • 一文帶你了解C++中deque的使用

    一文帶你了解C++中deque的使用

    C++中的deque是一種雙端隊列,可以在隊列的前端和后端進行插入元素和刪除操作,同時可以視作一個長度不定的數(shù)組,支持高效的插入和刪除操作。本篇文章將深入探討C++中的deque的使用,感興趣的可以了解一下
    2023-05-05
  • 詳解C++ 動態(tài)內(nèi)存分配與命名空間

    詳解C++ 動態(tài)內(nèi)存分配與命名空間

    這篇文章主要介紹了詳解C++ 動態(tài)內(nèi)存分配與命名空間,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • C語言編程中統(tǒng)計輸入的行數(shù)以及單詞個數(shù)的方法

    C語言編程中統(tǒng)計輸入的行數(shù)以及單詞個數(shù)的方法

    這篇文章主要介紹了C語言編程中統(tǒng)計輸入的行數(shù)以及單詞個數(shù)的方法,利用最基礎的循環(huán)和判斷語句寫成,需要的朋友可以參考下
    2015-11-11
  • C語言通過二分查找實現(xiàn)猜數(shù)字游戲

    C語言通過二分查找實現(xiàn)猜數(shù)字游戲

    這篇文章主要為大家詳細介紹了在C語言中如何通過二分查找思想編寫一個簡單的猜數(shù)字游戲,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-02-02
  • 15種?C++?常見報錯原因分析

    15種?C++?常見報錯原因分析

    這篇文章主要介紹了15種?C++?常見報錯,本文通過實例代碼給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • C語言實現(xiàn)打印數(shù)字金字塔

    C語言實現(xiàn)打印數(shù)字金字塔

    這篇文章主要介紹了C語言實現(xiàn)打印數(shù)字金字塔方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論