c++ 调用dl里的导出类
来源: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里的导出类的更多相关文章
- VS后台程序无法调用App_Code里的公共类解决方案
在Web应用程序中不能通过右键项目-〉”添加“-〉”添加ASP.NET文件夹“方式添加 .因为Web应用程序中App_Code就不存在 .不过可以通过手动的方式创建,添加一个文件夹命名为App_Cod ...
- 如何调用DLL中的导出类
之前在网上一直查不到关于把类打包成dll文件的程序,今天自己写了个测试程序,供大家参考 一.生成类的dll文件 1.我是在vs2008上测试的,建立工程,在选择建立何种类型的工程的时候,勾上appli ...
- C#调用C++导出类(转)
由于使用别人的Dll,导出的是一个实体类,在C#里封送很难,百度下,有个朋友回复一篇英文的,虽然不一定使用,但可以作为一个知识点,现把原文贴下: c#调用C++写的dll导出类,包含继承,重载等详细介 ...
- C#调用C++导出类的一个实例
一直认为带导出类dll的只有VC自己可以调用,其它编程语言无法调用,今天看到一篇文章才知道自己错了.https://blog.csdn.net/huiyouyongdeyu2011/article/d ...
- VC++导入导出类
一.导出类 VC++中导出类很简单,下面列出了两个等价的方法: 方法1: class __declspec(dllexport) CTest { public: int m_nValue ...
- DLL导出类避免地狱问题的完美解决方案
DLL动态链接库是程序复用的重要方式,DLL可以导出函数,使函数被多个程序复用,DLL中的函数实现可以被修改而无需重新编译和连接使用该DLL的应用程序.作为一名面向对象的程序员,希望DLL可以导出类, ...
- DLL的概念、dll导出类(转贴)
1. DLL的概念DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数.变量或类.这些可以直接拿来使用.静态链接库与动态链接库的区别:(1)静态链接库与动态链 ...
- (转)C++类库开发之导出类设计原则
上一篇博客详细陈述了类库开发的各个知识点(http://blog.csdn.net/z702143700/article/details/45989993),本文将进一步陈述,对于类库开发过程中导出类 ...
- C++ DLL导出类 知识大全
在公司使用C++ 做开发,公司的大拿搭了一个C++的跨平台开发框架.在C++开发领域我还是个新手,有很多知识要学,比如Dll库的开发. 参考了很多这方面的资料,对DLL有一个基本全面的了解.有一个问题 ...
随机推荐
- 使用ExecutorCompletionService 管理线程池处理任务的返回结果
在我们日常使用线程池的时候,经常会有需要获得线程处理结果的时候.此时我们通常有两种做法. 1. 使用并发容器将callable.call() 的返回Future存储起来.然后使用一个消费者线程去遍历这 ...
- How do I connect to a local elevation server?
How do I connect to a local elevation server? brett Reply | Threaded | More Mar 18, 2009; 10:02p ...
- Java经典案例之-判断兔子的数量(斐波那契数列)
/** * 描述:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子, * 假如兔子都不死,问每个兔子总数为多少? * 分析:根据题目条件可以推断 * 兔子的规律 ...
- Win7 x64 Eclipse无法识别手机 / adb interface有黄色感叹号,无法识别
今天公司停电,因此把安卓项目带回宿舍做.宿舍的笔记本,装的是Win7 x64,手机连上电脑后,windows可以识别,但Eclipse的DDMS中却无法识别,什么都没有: 然后打开设备管理器查看,发现 ...
- xml文档PHP查询代码(学习使用)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " http://www.w3.org ...
- 安装 mrtg
http://blog.csdn.net/cnbird2008/article/details/2072627
- js观察者模式与Model
目的 观察者模式是常见的设计模式,可以被应用到MV*框架的Model上,来实现对数据变化的监听. 基本概念 观察者模式是一种常见的设计模式.被观察者可以被订阅(subscribe),并在状态发生改变时 ...
- ILSpy .NET反编译工具下载地址
官方下载: http://ilspy.net/ 中文版下载地址: http://www.fishlee.net/soft/ilspy_chs/#C-310
- Spring mvc配置Json返回
第一种 配置 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHand ...
- Error while registering Oracle JDBC Diagnosabilityh
Error while registering Oracle JDBC Diagnosability 把ojdbc6.jar换成ojdbc14.jar就可以了: 后来发现又没有问题了:不过据说这个是数 ...