精华内容
下载资源
问答
  • C++类封装成DLL步骤如下: 1、 VS2015新建一个Win32项目,应用程序类型选择DLL 2、新建DLL项目后,项目解决方案文件结构如下: 3、配置OSG库 因为DLL使用到了OSG库,所以项目首先要配置OSG库...

    最近在进行OSG开发,想将里面模型导入部分重复使用的代码封装成DLL,这样后续不需要重复编写这部分代码了。而C++类封装成DLL步骤如下:

    1、 VS2015新建一个Win32项目,应用程序类型选择DLL

     

     
    2、新建DLL项目后,项目解决方案文件结构如下:
     
    3、配置OSG库
    因为DLL使用到了OSG库,所以项目首先要配置OSG库,如下:
     
     
     
    4、打开OSG.h头文件,进行代码编写修改
    在头文件中加入OSG库的相关头文件,并且在类中进行函数和变量的声明,头文件如下(标红部分为添加代码):
     
    5、在源文件中OSG.cpp中,添加类的函数相应的实现,如下标红部分为添加代码):
     
    6、在VS2015中按F7(生成解决方案)
    如果编译成功,则输出如下

     

    如果是在Debug环境下编译的,则在Debug目录下会生成DLL文件和lib文件;Release环境下同理。另外,如果封装后的DLLx64环境下的项目使用,则此处需要在Debug下的x64环境下编译生成。
     
    7、分别在DLL项目相应位置配置OSG.h、OSG.lib、OSG.dll三个文件,我们就能使用封装类的方法了(参看笔记:VS的可执行文件目录、包含目录、库目录、附加包含目录、附加库目录、附加依赖项的解释和区别
     
     
    PS:在编译成功生成DLL项目有,按Ctrl+F5 不调试执行,提示如下错误:
    原因:
    因为此DLL封装项目不是可执行项目,运行不了的。只要编译成功后,就完成了DLL的封装。

     


    <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

     
     
     
     

    转载于:https://www.cnblogs.com/zcmacbeth/p/11173444.html

    展开全文
  • 控制屏幕保护程序API函数的C++类封装by 郭世龙简 介 前几天在codeproject上看到了一篇关于用C#封装控制的屏幕保护程序的文章,觉的很有用于是决定将其改装成C++类封装以供C++程序员使用。这个提供了查询屏幕保护...
    控制屏幕保护程序API函数的C++类封装
    by 郭世龙
    简 介
          前几天在codeproject上看到了一篇关于用C#封装控制的屏幕保护程序的文章,觉的很有用于是决定将其改装成C++类封装以供C++程序员使用。这个类提供了查询屏幕保护程序信息的函数,包括是否启用、是否正在运行、查询和设置屏保等待时间、强制关闭屏幕保护程序等函数。user32.dll 动态链接库提供的SystemParametersInfo()API函数(需要包含头文件Windows.h)提供了对屏幕保护程序控制的功能。
      
    函数介绍
    • bool GetScreenSaverActive( )                  —— 判断屏幕保护程序是否开启,如果开启则返回true否则返回false
    • void SetScreenSaverActive(int Active)    —— 传递参数1来开启屏幕保护程序, 传递0来关闭屏幕保护程序
    • int GetScreenSaverTimeout( )                  —— 返回当前屏幕保护程序等待时间设置,以秒位单位
    • void SetScreenSaverTimeout(int Value)    —— 设置屏幕保护程序等待时间,以秒位单位
    • bool GetScreenSaverRunning( )          —— 判断当前屏幕保护程序是否正在运行,是则返回ture否则返回false
    • void KillScreenSaver( )                          —— 强制结束屏幕保护
      
    封装代码
          使用时,拷贝代码到程序中,引入这个ScreenSaverCtrl类文件即可。
     
    头文件:
    //ScreenSaverCtrl.h
    #pragma once
    #include "Windows.h"
    /*   //静态链接
    #pragma comment(lib,"User32.lib")   //在link时,链接到User32.lib文件

    extern "C"
    {
       WINUSERAPI BOOL WINAPI SystemParametersInfoW(__in UINT uiAction,__in UINT uiParam,__inout_opt PVOID pvParam,__in UINT fWinIni);
      WINUSERAPI BOOL WINAPI SystemParametersInfoA(__in UINT uiAction,__in UINT uiParam,__inout_opt PVOID pvParam,__in UINT fWinIni);
      WINUSERAPI BOOL WINAPI PostMessageA(__in_opt HWND hWnd,__in UINT Msg, __in WPARAM wParam,__in LPARAM lParam);
      WINUSERAPI HDESK WINAPI OpenDesktopA(__in LPCSTR lpszDesktop,__in DWORD dwFlags,__in BOOL fInherit,__in ACCESS_MASK dwDesiredAccess);
      WINUSERAPI BOOL WINAPI CloseDesktop(__in HDESK hDesktop);
      WINUSERAPI BOOL WINAPI EnumDesktopWindows( __in_opt HDESK hDesktop, __in WNDENUMPROC lpfn, __in LPARAM lParam);
      WINUSERAPI BOOL WINAPI IsWindowVisible(__in HWND hWnd);
      WINUSERAPI HWND WINAPI GetForegroundWindow(VOID);
      WINUSERAPI BOOL WINAPI EnumDesktopWindows(__in_opt HDESK hDesktop,__in WNDENUMPROC lpfn,__in LPARAM lParam);
     
    }
    */
    //BOOL CALLBACK KillScreenSaverFunc(HWND hWnd,LPARAM lParam);
    class ScreenSaverCtrl
    {
     public:
      ScreenSaverCtrl(void);
      static bool GetScreenSaverActive();
      static void SetScreenSaverActive(int Active);
      static int GetScreenSaverTimeout();
      static void SetScreenSaverTimeout(int Value);
      static bool GetScreenSaverRunning();
      static void KillScreenSaver();
     private:
      static BOOL CALLBACK KillScreenSaverFunc(HWND hWnd,LPARAM lParam);
      
     public:
      ~ScreenSaverCtrl(void);
    };
     
    实现文件:
     
    //ScreenSaverCtrl.cpp
    #include "ScreenSaverCtrl.h"
     
    /*
    BOOL CALLBACK KillScreenSaverFunc(HWND hWnd,LPARAM lParam)    //注意回调函数不能为普通成员函数,但可为静态成员函数
    {
      if( IsWindowVisible(hWnd) ) PostMessage( hWnd, WM_CLOSE, 0, 0 );
      return true;
    }
    */
     
    ScreenSaverCtrl::ScreenSaverCtrl(void
    {
     
    }
     
    bool ScreenSaverCtrl::GetScreenSaverActive( )
    {
      BOOL isActive = FALSE;  
    //一定是BOOL而不是bool否则运行时错误
      SystemParametersInfo(SPI_GETSCREENSAVEACTIVE,0,&isActive, 0);
      return isActive;
    }
     
    void ScreenSaverCtrl::SetScreenSaverActive( int Active )
    {
      int nullVar = 0;
      SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,Active, &nullVar, SPIF_SENDWININICHANGE );
    }
     
    int ScreenSaverCtrl::GetScreenSaverTimeout( )
    {
      int value = 0;
      SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT, 0,&value, 0 );
      return value;
    }
      
    void ScreenSaverCtrl::SetScreenSaverTimeout(int Value )
    {
      int nullVar = 0;
      SystemParametersInfo(SPI_SETSCREENSAVETIMEOUT,Value, &nullVar,SPIF_SENDWININICHANGE );
    }
      
    bool ScreenSaverCtrl::GetScreenSaverRunning( )
    {
      BOOL isRunning = FALSE;
      SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, 0,&isRunning, 0 );
      return isRunning;
    }
      
    void ScreenSaverCtrl:: KillScreenSaver( )
    {
      HDESK hDesktop = OpenDesktop(TEXT("Screen-saver"), 0,false,DESKTOP_READOBJECTS | DESKTOP_WRITEOBJECTS);
      if( hDesktop != NULL)
      {
         EnumDesktopWindows(hDesktop,KillScreenSaverFunc,0);
         CloseDesktop( hDesktop );
      }
      else
      {
         PostMessage( GetForegroundWindow( ), WM_CLOSE, 0, 0 );
      }
    }
     
     //注意回调函数不能为非静态成员函数,因为其有隐含参数this 而静态成员函数没有this指针
    BOOL ScreenSaverCtrl::KillScreenSaverFunc(HWND hWnd,LPARAM lParam)   
    {
      if( IsWindowVisible(hWnd) ) PostMessage( hWnd, WM_CLOSE, 0, 0 );
      return true;
    }
     
    ScreenSaverCtrl::~ScreenSaverCtrl(void)
    {

    }
     
    测试程序
     
    编译运行环境
                   操作系统:Windows XP SP2
                   编译器:VS2005
     
    测试程序界面
     测试程序界面
    测试程序下载
     
    展开全文
  • c++类封装成dll

    千次阅读 2014-11-09 19:37:12
    如果已经写好了一个C++,希望把它做成dll动态链接库,这里介绍一种简单的方法。  利 用VC6新建工程时选择win32 dynamic-Link Library,然后添加头文件和cpp文件。假设名为exp,添加头文件exp.h,头文件中...

    如果已经写好了一个C++的类,希望把它做成dll动态链接库,这里介绍一种简单的方法。 
    利 用VC6新建工程时选择win32 dynamic-Link Library,然后添加头文件和cpp文件。假设类名为exp,添加头文件exp.h,头文件中声明类的定义,添加exp.cpp,其中是成员函数的具 体定义。与一般写类的定义不同,在exp.h中需要写成 
    class __declspec(dllexport) exp
    {

    }
    从而说明以后从dll要被导出的类是哪一个。这样编译完就会产生exp.dll和exp.lib两个文件。

          当已经生成dll后,可以在其它程序中调用dll中的类和成员函数。方法如下:
          a)把exp.dll和exp.lib复制到调用程序的执行路径下,注意不是debug路径下。
          b)在project->setting->link里添加exp.lib
          c)把exp.h复制到调用程序的执行路径下,将__declspec(dllexport)改成__declspec(dllimport)
         这样在主程序中就可以使用exp.h中声明的类和它的成员函数了。

    展开全文
  • C++类封装的例子

    2012-09-20 09:37:12
    这是一个类封装的例子,使用者无需知道实现细节,可以很方便地调用和测试函数。 #ifndef SORTING_H_H_INCLUDED #define SORTING_H_H_INCLUDED ...... #endif 以上代码与直接在首行加入#pragma once的作用...
    sorting.h
    //宏保护
    #ifndef SORTING_H_H_INCLUDED
    #define SORTING_H_H_INCLUDED
    using namespace std;
    class sorting()
    {
    public:
             int n;
             void bubble( );
    };
    #endif
    
    sorting.cpp
    #include <iostream>
    #include "sorting.h"
    using namespace std;
    void sorting::bubble()
    {
        //实现代码here
    }
    main.cpp
    #include <iostream>
    #include "sorting.h"
    using namespace std;
    int main()
    {
             sorting test;  //声明sorting类的对象
             test.bubble();  //由对象调用函数
             return 0;
    }
    Makefile
    GCC := g++
    all:
            $(GCC) -c main.cpp -o main.o
            $(GCC) -c sorting.cpp -o sorting.o
            $(GCC) -o main main.o sorting.o
    clean:
    #        rm main.o -rf
    #        rm sorting.o -rf
    #        rm main -rf
             rm *.o main *~ -rf
    

    这是一个类封装的例子,使用者无需知道实现细节,可以很方便地调用和测试函数。
    #ifndef SORTING_H_H_INCLUDED
    #define SORTING_H_H_INCLUDED
    ......
    #endif
    以上代码与直接在首行加入#pragma once的作用完全相同。宏保护,当在cpp文件里重复引入时可忽略,如:main.cpp中#include "sorting.h" 两次时,若没有宏保护则编译不通过,提示错误,若增加宏保护则不会。ifndef表示if not define,第一次引入.h时可顺利定义,之后的都被忽略。
    private:说明,它后面所有的变量和函数,都不可能被类外访问,只能在类内被使用。
    public:说明,它后面的所有变量和函数可以被类外的代码所访问,没有任何限制。
    protected:说明,它后面的所有变量和函数,只能被自己或自己派生的类所使用。不能被类外的代码使用

    展开全文
  • VS2013中C++类封装动态链接库

    千次阅读 2018-04-13 08:13:50
    最近跟一商业公司合作,开发地铁场景中交通信号灯的检测模块。所以需要将检测模块类封装成动态链接库,提供给该公司。现将该简单的封装过程记录下来,以便日后查看。
  • 在visual studio 2013中新建c++类MyFFmpeg; 在菜单栏点“项目----添加” 在弹出的选择窗体中依次点击选择“Visual C++ ----> C++类 ---->添加” ” 在接下来的c++类添加向导窗体中填写相关类名,然后勾选...
  • C++类封装成dll,dll中有全局变量

    千次阅读 2018-09-01 14:46:32
    #ifndef COM_DB_H #define COM_DB_H #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;iostream&gt; #ifdef MYLIBDLL #define MYLIBDLL extern "...#define MYLIBD...
  • /*析构函数*/ virtual ~MyFFmpeg(); /*视频文件总的毫秒数*/ int totalMs = 0; protected: int videoStream = 0; /*相关错误信息*/ char errorbuf[1024]; //应对多线程访问时的同步锁 QMutex mutex; ...
  • C++类封装 | 封装

    千次阅读 2021-01-23 23:03:51
    C++通过来实现封装性,把数据和与这些数据有关的操作封装在一个中,或 者说,的作用是把数据和算法封装在用户声明的抽象数据类型中,在声明了一个以后,用户主要是通过调用公用的成员函数来实现提供的功能 ...
  • C++ 封装

    千次阅读 2019-03-28 23:09:37
    把变量(属性)和函数(操作)合成一个整体,封装在一个中 对变量和函数进行访问控制 访问属性 内部 子类 外部 public 可 可 可 protected 可 可 否 private 可 否 否...
  • DLL 对C++类封装

    千次阅读 2010-12-14 15:01:00
    C++类封装在DLL中,并在DLL中创建静态对象,在外部直接调用相关函数。1, 打开VC2008创建新工程,选择Win32-> Win32 Porject,点击next。2, 选择Application type:DLL,点击finish即创建了一个非MFC DLL----...
  • NDK学习笔记:java类封装c++类

    千次阅读 2017-06-05 22:59:28
    本文介绍了jni开发的中java如何直接对c++类进行封装和调用,并附源码。另外修改了原文中的一些错误。
  • C++ RabbitMQ封装

    千次阅读 2019-03-28 18:43:00
    C++ RabbitMQ封装 RabbitMq的源码可以在官网下载https://www.rabbitmq.com/,需要使用cmake转为vs工程。由于源码不大,此处选择编译librabbitmq,生成librabbitmq.4.lib静态库,直接链接到自己的程序中。 附上vs版...
  • C++ socket 封装

    千次阅读 2018-08-16 16:54:37
    C++ socket 封装
  • memcached 的c++封装类

    2015-03-06 01:09:16
    谁有memcached的c++封装类啊!能否给我一个呢?感谢!
  • C++类封装

    万次阅读 多人点赞 2016-09-05 13:58:10
    1. C++面向对象编程介绍 面向对象编程(Object Oriented Programming),简称OOP。 在传统的面向过程编程中,数据以及数据的相关操作函数都是分离的独立个体; 对象,如周围的一切其实都是对象;就编程角度,...
  • c++ socket类封装(udp/tcp)

    热门讨论 2009-11-20 11:31:57
    类c++封装的一个socket,对新手还是有点帮助
  • MySQL-C++封装类

    千次阅读 2017-01-24 22:10:54
    MySQL-C++封装类
  • C++异常封装类

    千次阅读 2011-04-04 16:19:00
    #include #include #include #include //custom exceptions ...class Exception : public std::exception ... /// /brief Create exception object as copy of another ... Exception(const Exception& e) ...
  • c++类封装,对象线程封装

    千次阅读 2017-07-30 09:18:02
    c++类封装,对象线程封装C++面向对象编程介绍 面向对象编程(Object Oriented Programming),简称OOP。 在传统的面向过程编程中,数据以及数据的相关操作函数都是分离的独立个体; 对象,如周围的一切其实都是...
  • FFMPEG的C++封装类

    千次阅读 2016-03-13 18:14:52
    又看了JUVRTMPClient 这种漂亮的封装,就想做点事情,给FFMPEG做一个C++封装类。 定义 CFFMpeg 封装ffmpeg的初始化,打开流等操作。它包含 OpenInput 打开流 FindAV 查找Audio和Video流并获取相应的解码器 ...
  • C++类封装的概念

    万次阅读 多人点赞 2018-07-16 22:41:54
     这节我们来学习封装的概念,我们知道,一般电脑都是由CPU、内存、主板、硬盘等部件组合组成,像下边这样  但是我们组装电脑的时候,仅仅是把硬盘、内存、CPU、主板等这些部件的接口相互连接起来就行,我们...
  • c++作为面向对象的程序语言,有三大特性:封装性、继承性、多态性。 此篇说明封装性:什么是封装?自己的理解就是将很多同类事物(比如狗)的共同特性(名字、颜色、跑、叫、吃)封装起来,然后遇到一个该事物...
  • C++封装和对象

    千次阅读 2020-02-26 12:35:04
    2-1 C++类和对象 目的不同,抽象出的信息不同; 对象是具体的事物; 是从对象中抽象出来的,出于不同的目的,同一事物可以被抽象为不同的封装:把实现细节封装起来,只暴露给用户关心的部分; 怎么...
  • C++封装

    千次阅读 2019-01-24 22:20:06
    和对象阶段,我们只研究封装特性,那什么是封装呢? 封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行 交互。 封装本质上是一种管理:我们如何管理兵马俑...
  • C++类封装 pthread

    千次阅读 2015-02-28 14:29:40
    一个项目中需要用到pthread,发现把它封装中使用起来更加的方便。 这里保存了实例代码,以备以后使用。 头文件中定义了ThreadBase,它包含了线程基本的一些接口,start() join() 和quit() run()为接口函数,...
  • http下载和上传文件 c++ 封装类

    热门讨论 2014-12-10 13:37:23
    c++ 封装的 CHttpClient 能够实现http文件上传和下载
  • 现在在Windows下的应用程序开发,VS.Net占据了...下面就用一个完整的实例来详细说明怎样用托管C++封装一个C++以提供给C#使用。 比如,现在有一个工程名为NativeCppDll的由C++编写的DLL,里面输出了一个CPerson...
  • C++封装互斥锁

    千次阅读 2018-11-22 22:34:41
    最近在看线程池这一块的知识点,其中遇到了使用C++类封装互斥锁的办法,特此记录下。 参考书籍:《提高C++性能的编程技术》第二章 一、问题由来 有时我们会遇到两个进/线程共同使用同一个资源的情况,这个资源就...
  • 基本思想是,写一个 wrapper文件,把 C++类封装起来,对外只提供C语言的接口,和 C++i相关的都在 wrapper的实现文件里实现。 //------apple.h #ifndef __APPLE_H__ #define __APPLE_H__ class Apple { public:  ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 277,573
精华内容 111,029
关键字:

c++类的封装

c++ 订阅