我知道很多人之前已经问过这个问题,但据我所知,没有明确的答案可以帮助C ++初学者。所以,这是我的问题(或者如果你愿意的话请求),
假设我正在使用Xcode或任何文本编辑器编写C ++代码,并且我想使用另一个C ++程序中提供的一些工具。例如,可执行文件。那么,我怎样才能在我的代码中调用该可执行文件?
另外,我可以利用C ++程序中提供的其他函数/对象/类,并通过这种调用技术在我的C ++代码中使用它们吗?或者它只是我可以调用的可执行文件?
我希望有人可以提供初学者可以吸收的明确答案..:p
答案 0 :(得分:3)
那么,如何在我的代码中调用该可执行文件?
最简单的方法是使用system()
。例如,如果可执行文件被称为工具,那么:
system( "tool" );
然而,这种技术有很多警告。此调用只是要求操作系统执行某些操作,但每个操作系统可以以不同方式理解或回答相同的命令。
例如:
system( "pause" );
...将在Windows中运行,停止exectuion,但不在其他操作系统中。此外,有关文件路径内空格的规则也不同。最后,甚至分隔条也可以不同(仅适用于Windows的'\'。
我还可以从c ++开发其他函数/对象/类吗? 并通过这种调用技术在我的c ++代码中使用它们?
不是真的。如果你想使用别人创建的clases或函数,你必须获得它们的源代码并用你的程序编译它们。如果源代码足够小,这可能是最简单的方法之一。
很多时候,人们创建了库,这些库是有用的类和/或函数的集合。如果库以二进制形式分发,那么您将需要dll文件(或其他操作系统的等效文件),以及描述库提供的类和函数的头文件。这对于C ++程序员来说是一个丰富的挫折源,因为即使在同一操作系统中使用不同编译器创建的库也可能不兼容。这就是为什么很多时候库以源代码形式分发,带有一个指令列表(一个makefile甚至更糟糕的)来获取单个文件中的二进制版本,以及一个头文件,如前所述。
这是因为C ++标准不是编译器内部发生的低级事情。有许多实现细节可供编译器供应商随意使用,可能会尝试获得更好的性能。遗憾的是,这意味着很难分发一个简单的库。
答案 1 :(得分:1)
您可以轻松地调用另一个程序 - 这将启动一个完全独立的程序副本。请参阅system()或exec()系列调用。
这在unix中很常见,其中有许多小程序接受文本输入流,做某事并将输出写入下一个程序。使用这些,您可以排序或搜索一组数据,而无需再编写任何代码。
在Windows上,可以轻松自动启动文件的默认应用程序,因此您可以编写pdf文件并启动默认应用程序以查看PDF。在Windows上更难的是控制一个单独的giu程序 - 除非程序故意编写以允许远程控制(例如在Windows上使用com / ole),否则你无法控制用户在该程序中执行的任何操作。