⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_26472.htm

📁 vc
💻 HTM
字号:
<p>
序号:26472 发表者:力铭 发表日期:2003-01-01 20:59:20
<br>主题:我要疯了,到底问题在哪里呀?
<br>内容:9.2静态连接库<BR><BR>9.2.1创建静态库<BR><BR>现在以一个简单的数学函数库为例介绍静态库的创建和使用。<BR><BR>要创建静态库,选择File-&gt;New菜单,弹出New对话框。选择Projects标签,在项目类型列表框中选择Win32 Static Library,在Name中输入mymath,表明要创建一个mymath.lib的静态库文件。<BR><BR>然后用Project-&gt;Add to Project-&gt;Files菜单往mymath工程中加入以下两个文件:<BR><BR>1.头文件(见清单9.1):定义了Summary和Factorial两个函数,分别用于完成求和与阶乘。注意这里使用C风格的函数,需要加入extern “C”关键字,表明它是C风格的外部函数。<BR><BR>清单9.1 头文件<BR><BR>#ifndef _MYMATH_H<BR><BR>#define _MYMATH_H<BR><BR>extern “C”<BR><BR>{<BR><BR>int Summary(int n);<BR><BR>int Factorial(int n);<BR><BR>}<BR><BR>#endif<BR><BR>2.源文件:包含了Summary和Factorial函数的定义,见清单9.2。<BR><BR>清单9.2 源文件<BR><BR>int Summary(int n)<BR><BR>{<BR><BR>int sum=0;<BR><BR>int i;<BR><BR>for(i=1;i&lt;=n;i++)<BR><BR>{<BR><BR>sum+=i;<BR><BR>}<BR><BR>return sum;<BR><BR>}<BR><BR>int Factorial(int n)<BR><BR>{<BR><BR>int Fact=1;<BR><BR>int i;<BR><BR>for(i=1;i&lt;=n;i++)<BR><BR>{<BR><BR>Fact=Fact*i;<BR><BR>}<BR><BR>return Fact;<BR><BR>}<BR><BR> <BR><BR>在Build菜单下,选择Build菜单下的Build mymath.lib。Visual C++编译链接工程,在mymath\debug目录下生成mymath.lib文件。至此,静态连接库生成的工作就做完了。下面用一个小程序来测试这个静态库。<BR><BR>提示:用户在交付最终静态连接库时,只需要提供.lib文件和头文件,不需要再提供库的源代码。 <BR><BR> <BR><BR>9.2.2测试静态库<BR><BR> <BR><BR>用AppWizard生成一个基于对话框的应用程序test。打开test资源文件,修改IDD_TEST_DIALOG对话框资源,加入两个按钮。按钮ID和文字为:<BR><BR>IDC_SUM “&amp;Summary”<BR><BR>IDC_FACTORIAL “&amp;Factorial”<BR><BR>如图9-1所示。<BR><BR><BR><BR>图9-1 修改test对话框<BR><BR>用ClassWizard为上述两个按钮Click事件生成消息处理函数OnSum和OnFactorial,并加入代码,修改后的OnSum和OnFactorial见清单9.3。<BR><BR>清单9.3 OnSum和OnFactorial函数定义<BR><BR>void CTestDlg::OnSum() <BR><BR>{<BR><BR>// TODO: Add your control notification handler code here<BR><BR>int nSum=Summary(10);<BR><BR>CString sResult;<BR><BR>sResult.Format("Sum(10)=%d",nSum);<BR><BR>AfxMessageBox(sResult);<BR><BR>}<BR><BR>void CTestDlg::OnFactorial() <BR><BR>{<BR><BR>// TODO: Add your control notification handler code here<BR><BR>int nFact=Factorial(10);<BR><BR>CString sResult;<BR><BR>sResult.Format("10!=%d",nFact);<BR><BR>AfxMessageBox(sResult);<BR><BR>}<BR><BR>由于要使用mymath.lib中的函数,首先要将mymath.lib和mymath.h两个文件拷贝到test目录下。然后用Project-&gt;Add to Project-&gt;Files命令,将mymath.lib加入到工程中。<BR><BR>在testdlg.cpp文件头部,还要加入头文件mymath.h:<BR><BR>#include "stdafx.h"<BR><BR>#include "Test.h"<BR><BR>#include "TestDlg.h"<BR><BR> <BR><BR>#include "mymath.h"<BR><BR>#ifdef _DEBUG<BR><BR>#define new DEBUG_NEW<BR><BR>#undef THIS_FILE<BR><BR>static char THIS_FILE[] = __FILE__;<BR><BR>#endif<BR><BR>编译运行test程序,点Factorial按钮,弹出如图9-2的消息框。<BR><BR><BR><BR>按照这个方法生成的却总是说<BR>Linking...<BR>mymathtestDlg.obj : error LNK2001: unresolved external symbol _Summary<BR>mymathtestDlg.obj : error LNK2001: unresolved external symbol _Factorial<BR>Debug/mymathtest.exe : fatal error LNK1120: 2 unresolved externals<BR>Error executing link.exe.<BR>到底问题在哪里?我快疯了
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:songxinye 回复日期:2003-01-02 08:51:25
<br>内容:没有问题
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:飞翔的心 回复日期:2003-01-02 10:31:54
<br>内容:应该不是用Project-&gt;Add to Project-&gt;Files命令,将mymath.lib加入到工程中。<BR><BR>应该在Project Setting-&gt;Link-&gt;Object/library modules里加入mymath.lib
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -