惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
D
Docker
Blog — PlanetScale
Blog — PlanetScale
罗磊的独立博客
美团技术团队
V
V2EX
Last Week in AI
Last Week in AI
D
DataBreaches.Net
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
Microsoft Security Blog
Microsoft Security Blog
Microsoft Azure Blog
Microsoft Azure Blog
人人都是产品经理
人人都是产品经理
M
MIT News - Artificial intelligence
P
Proofpoint News Feed
B
Blog RSS Feed
博客园_首页
B
Blog
博客园 - 叶小钗
I
InfoQ
WordPress大学
WordPress大学
L
LangChain Blog
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
A
About on SuperTechFans
The GitHub Blog
The GitHub Blog
The Register - Security
The Register - Security
MyScale Blog
MyScale Blog
云风的 BLOG
云风的 BLOG
博客园 - 司徒正美
Latest news
Latest news
W
WeLiveSecurity
T
The Exploit Database - CXSecurity.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
Cyberwarzone
Cyberwarzone
Scott Helme
Scott Helme
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CERT Recently Published Vulnerability Notes
C
CXSECURITY Database RSS Feed - CXSecurity.com
Recent Commits to openclaw:main
Recent Commits to openclaw:main
N
News and Events Feed by Topic
S
Secure Thoughts
The Hacker News
The Hacker News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google DeepMind News
Google DeepMind News

博客园 - 流云

编译时找不到xxx.pch [ZT] SQL Server 中四种匹配符的含义[ZT] TAB ORDER按回车键下个控件自动获得焦点 VC获取系统时间、程序运行时间 - 流云 - 博客园 VC常用数据类型使用转换详解 [转] - 流云 - 博客园 VC遍历文件夹下所有文件和文件夹 - 流云 - 博客园 对话框与其控件的颜色 获得指针(文档、视图、框架) 让对话框中的菜单变灰(根据可用性而显示) 获取 本机 SQL SERVER 服务器名 - 流云 用VC++修改注册表----让我们踏出第一步(适合初学者) VC+ADO 连接ACCESS和SQL SERVER的方法 SQL SERVER 数据库备份还原 列表控件ListCtrl的使用 文本读写 CStdioFile流文件 文件读写 CFile 字体对话框FontDialog 颜色对话框ColorDialog VC获取系统时间、程序运行时间
动态链接库DLL的编写和调用(四则表达式计算)
流云 · 2005-05-19 · via 博客园 - 流云

在新建对话框上放置2个按钮(隐式和显式调用dll)和1个编辑框(连接变量m_exp),添加按钮响应代码如下(隐式调用时:dll文件要放在对应目录[系统目录或者程序目录]下):

void CCalcTestDlg::OnButtonYinshi() 
{
    
// TODO: Add your control notification handler code here
    UpdateData(true);
    
if(m_exp.IsEmpty())
    {
        AfxMessageBox(
"请先输入四则运算表达式:");
        
return;
    }
    
if(!TestExp(m_exp))
    {
        AfxMessageBox(
"格式错,请输入类似 \n -(-5+3*2)/2+1 \n这样的四则表达式");
        
return;
    }
    HMODULE hDll
=::LoadLibrary(".\\Calc.dll");//加载链接库 
    if(hDll==NULL){ 
        MessageBox(
"找不到Calc.dll,加载动态链接库失败","Warning",MB_OK|MB_ICONWARNING); 
        
return;} 
    typedef 
double (*pShow)(const char *); 
    pShow Show
=(pShow)::GetProcAddress(hDll,"Calc"); 
    
if(Show==NULL)
        MessageBox(
"函数调用失败","Warning",MB_OK|MB_ICONWARNING); //调用加载动态链接库失败
    else                 
        m_exp.Format(
"%f",Show(m_exp));     

    FreeLibrary(hDll);
    UpdateData(

false);
}
void CCalcTestDlg::OnButtonXian() 
{
    
// TODO: Add your control notification handler code here
    UpdateData(true);
    
if(m_exp.IsEmpty())
    {
        AfxMessageBox(
"请先输入四则运算表达式:");
        
return;
    }
    
if(!TestExp(m_exp))
    {
        AfxMessageBox(
"格式错,请输入类似 \n -(-5+3*2)/2+1 \n这样的四则表达式");
        
return;
    }
    CString filter,strPath;
    filter
="Dll(*.dll)|*.dll||"
    CFileDialog dlg(TRUE,NULL,
"Calc.dll",OFN_HIDEREADONLY,filter); if(dlg.DoModal()==IDOK) 
        strPath
=dlg.GetPathName(); 

    HMODULE hDll

=::LoadLibrary(strPath);//加载链接库 
    if(hDll==NULL){ 
        MessageBox(
"加载动态链接库失败","Warning",MB_OK|MB_ICONWARNING); 
        
return;} 
    typedef 
double (*pShow)(const char []); 
    pShow Show
=(pShow)::GetProcAddress(hDll,"Calc"); 
    
if(Show==NULL)
        MessageBox(
"函数调用失败","Warning",MB_OK|MB_ICONWARNING); //调用加载动态链接库失败
    else 
        m_exp.Format(
"%f",Show(m_exp)); 

    FreeLibrary(hDll);
    
    UpdateData(FALSE); 
}

bool CCalcTestDlg::TestExp(const char *str)
{
    
char ch;
    
int len=strlen(str),i=0;    
    
while(len)
    {
        ch
=*(str+i++);
        
if(i==len+1)
                
return true;
        
if(ch>='0' &&ch<='9' || ch=='+' || ch=='-' || ch=='*' ||ch=='/' ||ch=='(' ||ch==')')
            ;
        
else
            
return false;
    }
    
return true;        
}

这是用来做四则运算的,dll的编写如下(用MFC建立DLL工程):

这个程序运行后可以进行四则表达式运算(含括号、负号),更多的格式暂时没时间做~~