来源:http://blog.csdn.net/yysdsyl/article/details/2626033

动态dll的类导出:CPPDll2->test.h

#pragma  once
//#include "boost/shared_ptr.hpp"
class Test {
public:
virtual ~Test() {}
virtual void DoIt() =;
}; //
extern "C" _declspec(dllexport) std::auto_ptr<Test> CreateTest(); //
extern "C" _declspec(dllexport) boost::shared_ptr<Test> CreateTest();
extern "C" _declspec(dllexport) Test* CreateTestPtr();
extern "C" _declspec(dllexport) void DeleteTestPtr(Test*);

动态dll的类导出的实现:CPPDll2->test.cpp

//test.cpp
#include "stdafx.h"
#include "Test.h"
#include <stdio.h> //
#include <memory> //
#include "boost/shared_ptr.hpp"
class CTest : public Test
{
public:
virtual void DoIt()
{
printf("Should do something/n");
}
}; //
std::auto_ptr<Test> CreateTest() //
{ //
return std::auto_ptr<Test>(new CTest); //
} //
boost::shared_ptr<Test> CreateTest() //
{ //
return boost::shared_ptr<Test>(new CTest); //
}
Test* CreateTestPtr()
{
return new CTest();
}
void DeleteTestPtr(Test* t)
{
if(t !=NULL)
{
delete t;
t =NULL;
}
}

对loadlibrary的分装,可以作为tools:

//library.h
#pragma once
#include <windows.h>
#include <string>
#include <assert.h>
class Library
{
public:
explicit Library(const wchar_t* name)
{
m_handle = LoadLibrary(name);
assert(m_handle);
if (!m_handle)
throw std::runtime_error(std::string("Could not find library file:"));
}
~Library()
{
FreeLibrary(m_handle);
}
void* GetProc(const char* name)
{
void* proc = ::GetProcAddress(m_handle, name);
assert(proc);
return proc;
}
private:
HMODULE m_handle;
};

client的调用:

 #include "stdafx.h"
#include "library.h"
#include "../CppDll2/test.h"
int _tmain(int argc, _TCHAR* argv[])
{
typedef Test* (*CREATE)();
typedef void (*DEL)(Test*);
Library lib(L"CppDll2.dll");
std::auto_ptr<Test> test = ((std::auto_ptr<Test> ) lib.GetProc("CreateTest"));
Test* test = (((CREATE)(lib.GetProc("CreateTestPtr")))());
test->DoIt();
((DEL)(lib.GetProc("DeleteTestPtr")))(test);
return ;
}

c++ 调用dl里的导出类的更多相关文章

  1. VS后台程序无法调用App_Code里的公共类解决方案

    在Web应用程序中不能通过右键项目-〉”添加“-〉”添加ASP.NET文件夹“方式添加 .因为Web应用程序中App_Code就不存在 .不过可以通过手动的方式创建,添加一个文件夹命名为App_Cod ...

  2. 如何调用DLL中的导出类

    之前在网上一直查不到关于把类打包成dll文件的程序,今天自己写了个测试程序,供大家参考 一.生成类的dll文件 1.我是在vs2008上测试的,建立工程,在选择建立何种类型的工程的时候,勾上appli ...

  3. C#调用C++导出类(转)

    由于使用别人的Dll,导出的是一个实体类,在C#里封送很难,百度下,有个朋友回复一篇英文的,虽然不一定使用,但可以作为一个知识点,现把原文贴下: c#调用C++写的dll导出类,包含继承,重载等详细介 ...

  4. C#调用C++导出类的一个实例

    一直认为带导出类dll的只有VC自己可以调用,其它编程语言无法调用,今天看到一篇文章才知道自己错了.https://blog.csdn.net/huiyouyongdeyu2011/article/d ...

  5. VC++导入导出类

    一.导出类 VC++中导出类很简单,下面列出了两个等价的方法: 方法1: class __declspec(dllexport) CTest { public: int        m_nValue ...

  6. DLL导出类避免地狱问题的完美解决方案

    DLL动态链接库是程序复用的重要方式,DLL可以导出函数,使函数被多个程序复用,DLL中的函数实现可以被修改而无需重新编译和连接使用该DLL的应用程序.作为一名面向对象的程序员,希望DLL可以导出类, ...

  7. DLL的概念、dll导出类(转贴)

    1. DLL的概念DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数.变量或类.这些可以直接拿来使用.静态链接库与动态链接库的区别:(1)静态链接库与动态链 ...

  8. (转)C++类库开发之导出类设计原则

    上一篇博客详细陈述了类库开发的各个知识点(http://blog.csdn.net/z702143700/article/details/45989993),本文将进一步陈述,对于类库开发过程中导出类 ...

  9. C++ DLL导出类 知识大全

    在公司使用C++ 做开发,公司的大拿搭了一个C++的跨平台开发框架.在C++开发领域我还是个新手,有很多知识要学,比如Dll库的开发. 参考了很多这方面的资料,对DLL有一个基本全面的了解.有一个问题 ...

随机推荐

  1. EALayout 实践

    步骤: 1. 导入framework 1.0. 下载网址 1.1. 修改Build Setting -> other linker flags,添加 “-ObjC”(连接实现文件)和" ...

  2. 330. Patching Array

    Given a sorted positive integer array nums and an integer n, add/patch elements to the array such th ...

  3. 1.4.2.1. FILES(Core Data 应用程序实践指南)

    #define debug 1 #pragma mark - FILES NSString *storeFilename = @"Grocery-Dude.sqlite";

  4. js原生设计模式——4安全的工厂方法模式之Factory方法模式

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  5. qlv格式转换成MP4格式

    腾讯视频下载:1.先下载腾讯的客户端--->播放视频在客户端 2.播放视频一段后停止 3.点击腾讯客户端的右上角的设置 4.复制缓存地址(注意:在此之前需要设置"显示隐藏的文件夹&qu ...

  6. 使用DatePickerDialog、TimePickerDialog

    DatePickerDialog与TimerPicker的功能比较简单,用户也简单,只要如下两步即可. ①通过new关键字创建DatePickerDialog.TimePickerDialog实例,调 ...

  7. Usermod:user oracle is currently logged in 家目录不能改变解决方法

    [root@HE1 ~]# usermod -u 200 -g oinstall -G dba,asmdba,oper oracle[root@HE1 ~]# id oracleuid=200(ora ...

  8. JspContext对象与PageContext对象

    JspContext对象与PageContext对象: public abstract javax.servlet.jsp.PageContext extends (public abstract) ...

  9. Bootstrap入门(十三)组件7:导航条

    Bootstrap入门(十三)组件7:导航条 1.默认样式的导航条 2.嵌入表单和按钮 3.嵌入文本和非导航的链接 4.组件排列和下拉菜单 5.固定在顶部/底部 6.反色的导航条 7.路径导航 首先先 ...

  10. redis的配置详解

    redis 127.0.0.1:6379> CONFIG GET loglevel 1) "loglevel" 2) "notice" Redis 的配置 ...