簡體   English   中英

以跨平台方式在C ++中調用外部文件(例如可執行文件)

[英]Calling external files (e.g. executables) in C++ in a cross-platform way

我知道以前有很多人問過這個問題,但是據我所知,尚無明確的答案可幫助C ++初學者。 所以,這是我的問題(如果願意,可以提出要求),

假設我正在使用Xcode或任何文本編輯器編寫C ++代碼,並且我想使用另一個C ++程序中提供的一些工具。 例如,可執行文件。 因此,如何在代碼中調用該可執行文件?

另外,是否可以利用C ++程序中提供的其他函數/對象/類,並通過此調用技術在我的C ++代碼中使用它們? 還是我可以調用的可執行文件?

我希望有人可以提供一個清晰的答案,供初學者吸收。.:p

因此,如何在代碼中調用該可執行文件?

最簡單的方法是使用system() 例如,如果可執行文件稱為工具,則:

system( "tool" );

但是,此技術有很多警告。 該調用僅要求操作系統執行某項操作,但是每個操作系統可以不同地理解或回答相同的命令。

例如:

system( "pause" );

...將在Windows中運行,停止執行,但在其他操作系統中則無效。 另外,關於文件路徑內部空格的規則也不同。 最后,即使分隔條也可以不同(僅對於Windows為'\\')。

我還可以通過c ++利用其他函數/對象/類...並通過此調用技術在我的c ++代碼中使用它們嗎?

並不是的。 如果要使用他人創建的clase或函數,則必須獲取它們的源代碼並使用程序進行編譯。 只要源代碼足夠小,這可能是最簡單的方法之一。

人們經常創建庫,這些庫是有用的類和/或函數的集合。 如果該庫以二進制形式分發,則需要dll文件(或其他操作系統的等效文件)和描述該庫提供的類和函數的頭文件。 對於C ++程序員而言,這是令人沮喪的豐富原因,因為即使在同一操作系統中使用不同編譯器創建的庫也可能不兼容。 這就是為什么很多時候庫都是以源代碼形式分發的,如前所述,它具有一系列指令(一個makefile或更糟糕的文件)以在一個文件中獲得一個二進制版本,以及一個頭文件。

這是因為C ++標准沒有發生在編譯器內部的低級內容。 編譯器供應商可以自由地完成許多實現細節,而編譯器供應商則可以按照自己的意願去做,這可能會試圖提高性能。 不幸的是,這意味着很難分發一個簡單的庫。

您可以輕松地調用另一個程序-這將啟動該程序的完全獨立的副本。 請參閱system()或exec()調用系列。

這在UNIX中很常見,在UNIX中,有許多小程序會接受文本輸入流,執行某些操作並將輸出寫入下一個程序。 使用這些,您可以對一組數據進行排序或搜索,而無需編寫更多代碼。

在Windows上,很容易自動啟動文件的默認應用程序,因此您可以編寫pdf文件並啟動用於查看PDF的默認應用程序。 在Windows上,更難的是控制一個單獨的giu程序-除非該程序經過故意編寫以允許遠程控制(例如,在Windows上使用com / ole),否則您將無法控制用戶在該程序中所做的任何操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM