cnzdgs大哥,请进来下!关于编写dll的问题!

wangdeqie 2008-07-05 04:04:02
这几天一直看怎么把编好的程序制作成dll,看了孙鑫,上网也查知道了相关的基础知识,但还是不太懂怎么把类封成dll!您要是方便的话,能否帮我做个小例子,我看看,学习下!e-mail:wanzhiqiu@126.com

把这个类封成dll:class MyCFileDialog : public CFileDialog

就重载一个方法:
protected:
virtual void OnInitDone();
void MyCFileDialog::OnInitDone()
{
CWnd* parent = GetParent();
parent->GetParent()->EnableWindow();
parent->ModifyStyle(WS_BORDER, 0);

CRect rect ;
parent->GetClientRect(&rect);
parent->SetWindowPos(0,rect.left-100,rect.top,rect.right,rect.bottom,0);
GetParent()->GetDlgItem(IDOK)->ShowWindow(0);
GetParent()->GetDlgItem(IDCANCEL)->ShowWindow(0);
//
CFileDialog::OnInitDone();
}


使用:在另一个MFC程序里点击按钮弹出MyCFileDialog类的文件对话框。就这么简单!期待着您的回复。。。。。
...全文
112 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangdeqie 2008-07-05
  • 打赏
  • 举报
回复
哦,加了一天班,好累!结帐了,感谢您的关注!祝周末愉快!
cnzdgs 2008-07-05
  • 打赏
  • 举报
回复
如果你用动态加载、使用def文件,就不需要加__declspec了。
wangdeqie 2008-07-05
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 cnzdgs 的回复:]
如果是以模态方式显示对话框,就按你现在的写法。__declspec(dllexport)写在DLL源代码里面,不要写在def文件里。调用该DLL的程序中用__declspec(dllimport)声明函数,并导出DLL的LIB文件。
[/Quote]
1.cnzdgs大哥,你说的是静态链接的方法,不是用动态加载比较地道吗?用的时候再调用,要不会占内存空间。
2.__declspec(dllexport)加在函数的声明里,还是函数的实现里?我看网上怎么写的都有。。。。
cnzdgs 2008-07-05
  • 打赏
  • 举报
回复
; Explicit exports can go here
加在这个提示的位置,每行写一个函数名。
wangdeqie 2008-07-05
  • 打赏
  • 举报
回复
.def里面
; 111.def : Declares the module parameters for the DLL.

LIBRARY "111"
DESCRIPTION '111 Windows Dynamic Link Library'

EXPORTS
; Explicit exports can go here


我想增加函数名,防止函数被导出时,函数名被改编,可是函数名应该加在哪个位置?
加在最后就报错。。。。。
cnzdgs 2008-07-05
  • 打赏
  • 举报
回复
如果是以模态方式显示对话框,就按你现在的写法。__declspec(dllexport)写在DLL源代码里面,不要写在def文件里。调用该DLL的程序中用__declspec(dllimport)声明函数,并导出DLL的LIB文件。
wangdeqie 2008-07-05
  • 打赏
  • 举报
回复
__declspec(dllexport) 是写在函数声明了吧?.def在最后直接加就报错!里面有系统生成的一些东西
孤客天涯 2008-07-05
  • 打赏
  • 举报
回复
直接扩展函数出来
void __declspec(dllexport)__stdcall YOUFUN(xxx,xxx)
{
}
然后在.def中加入YOUFUN就可以了

应用程序中以显示的方式调用
LoadLibrary,GetProcAddress
wangdeqie 2008-07-05
  • 打赏
  • 举报
回复
__declspec(dllexport) void ShowDlg(void) 

{

CDllDialog dllDialog;

dllDialog.DoModal();

}

这么写?

cnzdgs 2008-07-05
  • 打赏
  • 举报
回复
你导出一个函数,在函数中创建对话框,EXE程序在需要创建对话框的时候调用这个函数。
wangdeqie 2008-07-05
  • 打赏
  • 举报
回复
我做出来了,class AFX_EXT_CLASS MyCFileDialog : public CFileDialog,但感觉这么写不好吧。。。。
wangdeqie 2008-07-05
  • 打赏
  • 举报
回复
基础知识我懂,我就是想看看一个地道地dll怎么写!
wangdeqie 2008-07-05
  • 打赏
  • 举报
回复
把整个类做接口不好,暴露太多,就把函数做借口!
孤客天涯 2008-07-05
  • 打赏
  • 举报
回复
随便 新建一个DLL工程,把你的类加进来,在类的定义加上__declspec(dllexport)
class __declspec(dllexport) MyCFileDialog : public CFileDialog
{
......
};
基本差不多了

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧