在同一个解决方案下,如何从一个工程中调用另外一个工程的函数

来源:互联网 发布:mac jenkins 配置 编辑:程序博客网 时间:2024/06/05 18:12
 

摘自http://9200cs.blog.163.com/blog/static/13457736920106695350747/

两个项目分别是test1和test2,test1中有一个函数fun()被test2调用,用法如下:

//test1.h
int fun(int a, int b);

//test1.cpp
#include <iostream>
#include "test1.h"

using namespace std;

int fun(int a, int b)
{
  return a + b;
}

然后将test1的配置类型改为 静态库(.lib)。

//test2.cpp
#include <iostream>
#include "test1.h"

using namespace std;

void main()
{
  cout << fun(2, 3);
}

然后将test2的项目依赖项设置为test1,在test2的附加包含目录中找到test1.h所在的文件夹,调试即可。

//另注:生成 .lib文件的工程中可以没有main()函数。

//另注:工程test1之所以生成的是 .lib文件而不是 .dll文件,是因为test1与test2在同一个解决方案中,没有涉及外部接口。

下面自己总结下自己的感受:

注意:这个时候会再解决方案文件夹下的debug或release文件夹下生成test1工程的.lib文件test1.lib,在进行编译的时候会将这个静态库的东西完全链接进入exe可执行文件,这样生成的可执行文件可以拷贝出来到任何其他windows平台的计算机上就可以运行;一个缺点就是如果代码很大的话,生成的.exe可执行文件会很大,静态链接方式就是会再编译的时候把所有需要的东西编译链接进可执行程序;

如果使用生成的.dll,这样生成的exe会相对小一些,但是如果将这个可执行文件拷贝到其他windows平台的计算机上,很可能就会无法运行,就需要把这个生成的dll文件拷贝到运行该程序的计算机上的所需要的制定目录下才可以(一般就是system32目录下);缺点就是比较麻烦;

记得以前做过的一次作业就是这样,写的一个MFC的应用程序,拷贝到别人电脑上死活跑不住,结果发现默认的编译方式是动态链接编译方式,之后设置成静态链接进行重编译,发现生成的可执行文件有了数倍的增长,但是放到别人的windows平台的计算机上就很顺利地运行了。在这里多些高手同学的指教~~

原创粉丝点击