我做了一个动态连接库1,其中用到另一个动态连接库2,我想将其包进,使其他人调用库1时,也能够使用库2的函数,该怎么办?
谢谢!!!!!!!!!!
谢谢!!!!!!!!!!
解决方案 »
- 自绘CSliderCtrl的一个问题
- 磁盘过滤问题,谢谢回答!!!
- 单文档框架,分隔条失败!
- 求助(急)我在CStatic图片框里面画了图,但是窗口被遮盖后就没有了
- 关于MFC类库UP有分
- 我想给程序加一个进程条,来显示数据生成的进度,可是以前从来没有做过进程条,能否给点指教。
- 请教那里可以下载免费的win2k/xp ddk ?
- 求助DX:如何在VC中实现水晶报表?
- 关于ADO连接sql server数据库失败的问题
- 在多文档/视图中,在取文档模板中的一个文档时需用到CDocTemplete::docname,请问 此值是在何处注册的?
- 饿着肚子在线等待1.5小时,关于如何设置Button 的背景色。
- 救命!!!! IIS相关问题,进者有分......
1、首先新建一个myDLL1工程使用MFC Extend DLL
在myDll1.cpp的末尾添加
__declspec(dllexport) int __stdcall showDlg(void)
{
// 这将是被二次调用的动态链接库
// 我假定只能够显示一个对话框
AfxMessageBox("ok called !") ;
return 0 ;
}
2、在myDll1.def中添加(好像在6.0中也可以不用*.def文件??)
showDlg @1
编译生成myDll1.dll
3、新建一个myDll2的MFC Extend DLL工程
在myDll2.cpp中添加:
int (__stdcall *pFunc)(void) ;
__declspec(dllexport) void __stdcall CallNextDll()
{
HINSTANCE hDllFunc ;
// 这是动态加载
hDllFunc = LoadLibrary("myDLL1.dll") ;
if(hDllFunc != NULL)
{
// 如果加载成功,进行寻址
pFunc = GetProcAddress(hDllFunc,"showDlg") ;
// 使用指向函数的指针进行调用
(*pFunc)() ;
// 动态卸载改动态链接库
FreeLibrary(hDllFunc) ;
}
}
同样在myDll2.def中添加CallNextDll @1
生成myDll2.dll和myDll2.lib
4、新建调用Applicaton,我用的是Dialog。
选择Project-》Add To Project-》Files...
然后添加myDll2.lib
好了,可以调用了!
在xxxxxDlg.cpp中加入__declspec(dllimport) void __stdcall CallNextDll() ;的函数声明
然后再OnOk函数中调用即可
void CCallDlgDlg::OnOK()
{
CallNextDll() ;
}
好了,运行它!注意要将两个myDll1.dll和myDll2.dll拷贝到相同目录下。
单击ok会发现myDll1.dll中的对话框出现了,但是我们调用的是myDll2.dll中的函数。
LoadLibrary() GetProcAddress() FreeLibrary()
可能是我说得不够具体:
1。我创建a.dll工程,将b.dll工程的b.lib导入,b.dll考入它的目录下,在将它的b.h文件中函数声明改为_declspec(dllimport) f1(),这样a.dll工程中f2可以用到f1函数,编译生成a.dll.
2.工程c调用a.dll,使其直接用到f1原型,而不是在a.dll的函数f2中使用了f1.
(只拷贝a.dll到c的目录下)
这样该怎么办?