非MFC的DLL的生成和运行时动态加载
2011-03-16 19:57
225 查看
运行期动态加载DLL:
我们假设有这样一个应用,我们要设计一个dll,该dll提供了对一个对数组的排序,我们可以编写各种排序算法的dll,通过选择算法的函数名即可让程序调用响应的排序方法。这需要用到动态加载了。
我们先来生成一个insertsortdll.dll封装了插入排序的算法实现,我们将函数名统一为sort_dll
1. 首先是运行时动态加载下如何生成dll
1) 新建win32项目,项目名insertsortdll,选择DLL(D),可以选择导入符号(对比生成的例子写自己的函数)
我编写了这样的方法,插入排序实现
2) 在工程中添加模块定义文件(DEF) insertsortdll.def
3) 生成项目,即可在工程的DEBUG目录下生成dll文件
2. 运行时动态加载---使用dll
与装载期间加载dll不同的是这里我们只需要使用刚才生成的dll
下面新建一个win32控制台程序,添加一个类Operator,在该类中添加一个方法sort
这个方法实现了用字符串名称动态决定调用哪个算法(dll),我们可以再按照1中所述的方法按照接口void(*FunctionSort)(int [],int )的要求编写其他的排序实现,如希尔排序等,生成相应的dll
我们假设有这样一个应用,我们要设计一个dll,该dll提供了对一个对数组的排序,我们可以编写各种排序算法的dll,通过选择算法的函数名即可让程序调用响应的排序方法。这需要用到动态加载了。
我们先来生成一个insertsortdll.dll封装了插入排序的算法实现,我们将函数名统一为sort_dll
1. 首先是运行时动态加载下如何生成dll
1) 新建win32项目,项目名insertsortdll,选择DLL(D),可以选择导入符号(对比生成的例子写自己的函数)
我编写了这样的方法,插入排序实现
INSERTSORTDLL_API void sort_dll(int arry[],int iLength){ int i,j,tmp; for(i = 1;i<iLength;i++){ tmp = arry[i]; for(j = i;j>0&& arry[j-1]>tmp;j--){ arry[j ] = arry[j-1]; } arry[j] = tmp; } }
2) 在工程中添加模块定义文件(DEF) insertsortdll.def
LIBRARY "insertsortdll" EXPORTS sort_dll
3) 生成项目,即可在工程的DEBUG目录下生成dll文件
2. 运行时动态加载---使用dll
与装载期间加载dll不同的是这里我们只需要使用刚才生成的dll
下面新建一个win32控制台程序,添加一个类Operator,在该类中添加一个方法sort
typedef void(*FunctionSort)(int [],int ); void Operator::sort(int arry[],int iLength,LPCWSTR lpcdDllPath){ FunctionSort pFunctionSort; HMODULE hModule = ::LoadLibrary(lpcdDllPath); if(NULL == hModule){ ::FreeLibrary(hModule); } pFunctionSort = (FunctionSort)::GetProcAddress(hModule,"sort_dll"); if(NULL == pFunctionSort){ ::FreeLibrary(hModule); } pFunctionSort(arry,iLength); }
这个方法实现了用字符串名称动态决定调用哪个算法(dll),我们可以再按照1中所述的方法按照接口void(*FunctionSort)(int [],int )的要求编写其他的排序实现,如希尔排序等,生成相应的dll
相关文章推荐
- 动态链接库DLL的加载:隐式加载(载入时加载)和显式加载(运行时加载)
- 基于odb的dll在xp系统下动态加载运行异常的原因及解决方法
- VC++通过动态生成并加载DLL,实现可执行文件的自删除
- 动态链接库DLL的加载:隐式加载(载入时加载)和显式加载(运行时加载)
- DLL运行期间动态加载
- VC6.0 生成mfc dll 无法加载
- VB 生成exe后,动态加载窗体的show事件会出现运行时错误5的解决方法
- 在mfc的dll里再动态加载jvm.dll引发的问题--不要在构造函数里做复杂的init流程
- java 解决调用c语言实现简单HelloWorld函数生成.dll动态链接库的32位dll文件无法在64位机上运行
- VS2010 生成DLL和动态加载DLL
- 初次接触vc 运行时动态加载DLL
- VB.NET动态加载C#或VB.NET生成的DLL文件调用动画教程[黑白智慧写](动态调用DLL).txt
- 动态链接库DLL的加载:隐式加载(载入时加载)和显式加载(运行时加载)
- 动态加载Dll时,通过Type生成类对象
- OD修改加载外部DLL动态链接库运行
- VC++通过动态生成并加载DLL,实现可执行文件的自删除
- MFC静态加载dll和动态加载dll示例
- VB.NET动态加载C#或VB.NET生成的DLL文件调用动画教程[黑白智慧写](动态调用DLL).txt
- 动态加载MATLAB生成的dll并反射dll里的函数
- 动态加载MATLAB生成的dll并反射dll里的函数,实现多返回值的功能