peakzhang 发表于 2007-12-18 23:36:58

请问:如何将dll中的导出给用户使用?就像ACE那样?

注意到,尽管ACE被编译成DLL,我们仍然可以使用DLL中定义的各种类。
现在我想对ACE进一步封装,加入本项目的tcp数据包解析逻辑,并封装成DLL供
项目组成员使用,问题是:
如果将该DLL中的类导出给其它人使用?使用什么语法呢?
有知道的请不吝指教,谢谢!

peakzhang 发表于 2007-12-18 23:38:18

最省事的做法是通过 MPC

下面是我的一个示例



//-*- MPC -*- now wouldn't this be cool...
// ServiceFactory.mpc,v 1.0 2006/08/01 tbergmann Exp

// 大厅服务
project(LobbyService) : acelib{
   sharedname = LobbyService
   dynamicflags += ACE_BUILD_SVC_DLL ACEXML_HAS_DLL ACEXML_PARSER_HAS_DLL

   dllout = $(BABY_ROOT)/lib
   libout = $(BABY_ROOT)/lib
   includes += $(BABY_ROOT)/ServiceFactory
   libpaths += $(BABY_ROOT)/lib
   libs +=ServiceFactory ACEXML ACEXML_Parser


   Source_Files {
         LobbyServiceFactory.cpp
         OptionsHandler.cpp
         GameClient.cpp
       }

   Header_Files {
      LobbyServiceFactory.h
      OptionsHandler.h
      GameClient.h
   }   
}



下面是一个头函数的声明



//@file: GameClient.h
//@date: 2007-1-26
//@author: Stone Jiang<2005119@gmail.com>

#ifndef GAME_CLIENT_H_20070126
#define GAME_CLIENT_H_20070126
#include "ace/svc_export.h"
#include "LobbyServiceFactory.h"//User_T

class ACE_Svc_Export GameClient_T: public ClientHandler_T
{
public:
    GameClient_T(void* arg = 0);
    virtual ~GameClient_T();

    // 处理UDP请求
    virtual int processUDPRequest(ACE_Message_Block* mb,
      const ACE_INET_Addr&remoteAddr);
   
    //处理客户端登录
    virtual int login(const char* name, const char* password);

public:
    User_Tuser_;

public:
    //for debug only
    virtual int process();
};

#endif



ACE_Svc_Export 的定义在 "ace/svc_export.h" 中.

当然你也可以通过 generate_export_file.pl 生成一个你自己的 export文件.

更进一步的细节,可以看一下

C++ Language Reference


dllexport, dllimport
页: [1]
查看完整版本: 请问:如何将dll中的导出给用户使用?就像ACE那样?