c++动态加载dll中的类(用于实现依据字符串类名创建对象)
2008-07-08 20:11
976 查看
参考资料:
http://blog.csdn.net/yysdsyl/archive/2008/07/08/2626033.aspx
用来生成dll的文件:
--------------------------------------------
--------------------------------------------------
http://blog.csdn.net/yysdsyl/archive/2008/07/08/2626033.aspx
用来生成dll的文件:
////////////////////////////Test.h class Test { public: Test(void); public: virtual ~Test(void); public: virtual void DoSth()=0; };
--------------------------------------------
///////////////////TTest.h /////////////TTest继承自Test class TTest : public Test { public: TTest(void); public: ~TTest(void); public: virtual void DoSth(){std::cout<<"TTest:do sth/n";}; };
///////////关键 extern "C" __declspec(dllexport) Test* CreateTTestPtr(); extern "C" __declspec(dllexport) void DeleteTTestPtr(Test* t);
--------------------------------------------------
////////////////TTest.cpp #include "TTest.h" TTest::TTest(void) { } TTest::~TTest(void) { std::cout<<"destruct TTest/n"; } Test* CreateTTestPtr() { return new TTest(); } void DeleteTTestPtr(Test* t) { if(t!=NULL) delete t; }
测试程序:
#include "Test.h" #include <Windows.h> typedef Test* (CREATEFN)(); typedef void (DELETEFN)(Test* ); int _tmain(int argc, _TCHAR* argv[]) { HINSTANCE hd=::LoadLibrary("AnotherDll.dll"); CREATEFN* pfn; DELETEFN* xfn; pfn=(CREATEFN *)::GetProcAddress(hd,"CreateTTestPtr"); xfn=(DELETEFN *)::GetProcAddress(hd,"DeleteTTestPtr"); Test* t=(*pfn)(); t->DoSth(); (*xfn)(t); getchar(); return 0; }
-------------------------------------------------------------------
向dll中添加新的继承于Test基类时,实现自身的同时实现下面的两函数
extern "C" __declspec(dllexport) Test* CreateXXXPtr(); extern "C" __declspec(dllexport) void DeleteXXXPtr(Test* t);
(其中XXX表示新添加的类的类名,当然命名可以随意,只要你能在应用程序中找到这两导出函数,不过统一的命名规则
对根据类名创建对象是有好处的)
相关文章推荐
- c++动态加载dll中的类(用于实现依据字符串类名创建对象)
- 仿MFC实现c++按名动态创建对象之续(瘦身以及解决其在dll中使用的问题)
- C++实现只能动态或者静态创建对象
- 三十一、反射、C++动态对象创建实现
- 从零开始学C++之模板(四):用模板实现单例模式(线程安全)、模板方式实现动态创建对象
- [C++学习笔记14]动态创建对象(定义静态方法实现在map查找具体类名对应的创建函数,并返回函数指针,map真是一个万能类)good
- C++ 类工厂实现动态对象创建
- C++实现反射(根据类名动态创建对象)
- 动态加载dll,并创建类对象放入到list中。
- 仿MFC实现c++的按名动态创建对象功能
- 从零开始学C++之模板(四):用模板实现单例模式(线程安全)、模板方式实现动态创建对象
- 从零开始学C++之模板(四):用模板实现单例模式、模板方式实现动态创建对象
- c# 动态加载dll文件,并实现调用其中的简单方法
- C++对象布局及多态实现之动态和强制转换
- 如何在SpringMVC框架中利用Java反射机制和Javassist实现Java对象、属性、注解的动态创建生成
- C#实现动态加载dll的方法
- 从零开始学C++之动态创建对象
- C++之对象的动态创建和释放
- C++中对象的动态创建与释放
- [UE4]C++实现动态加载的问题:LoadClass<T>()和LoadObject<T>()