1. 程式人生 > >在同一個解決方案下,如何從一個工程中呼叫另外一個工程的函式

在同一個解決方案下,如何從一個工程中呼叫另外一個工程的函式

 

兩個專案分別是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平臺的計算機上就很順利地運行了。在這裡多些高手同學的指教~~