Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 跨平台进入功能,不需要';t显示控制台_C++_Cross Platform_Entry Point_Fltk - Fatal编程技术网

C++ 跨平台进入功能,不需要';t显示控制台

C++ 跨平台进入功能,不需要';t显示控制台,c++,cross-platform,entry-point,fltk,C++,Cross Platform,Entry Point,Fltk,我正在使用一个跨平台的GUI库(FLTK)来制作一些GUI,我没有使用Win32 API。我希望这个程序在Windows、Linux和Mac操作系统上运行 我真的不明白跨平台mumbo jumbo是如何工作的(看看我的帐户名), 但我想我理解跨平台的含义。但这不是我的问题 我的问题是我现在的entry函数只是int main(), 但是当我使用这个输入功能时,控制台会弹出。我不想要任何控制台, 所以我知道我可以让我的输入函数如下: int wWinMain(HINSTANCE hInst, HI

我正在使用一个跨平台的GUI库(FLTK)来制作一些GUI,我没有使用Win32 API。我希望这个程序在Windows、Linux和Mac操作系统上运行

我真的不明白跨平台mumbo jumbo是如何工作的(看看我的帐户名), 但我想我理解跨平台的含义。但这不是我的问题

我的问题是我现在的entry函数只是int main(), 但是当我使用这个输入功能时,控制台会弹出。我不想要任何控制台, 所以我知道我可以让我的输入函数如下:

int wWinMain(HINSTANCE hInst, HINSTANCE hPreInst, LPWSTR nCmdLine, int nCmdShow)
也不会有安慰

我担心的是,由于我必须使用Win32 API来拥有这个wWinMain入口函数(因为Hinstance和LPWSTR),该程序将不再与其他操作系统兼容

所以我的问题是,如果我使用wWinMain函数,我的程序会在Mac和Linux操作系统上工作吗?如果没有,是否有一个功能,我可以使用它不创建控制台,并将所有操作系统的工作

最后,也许我完全是在幻想能够拥有相同的.exe
程序可以在任何操作系统上工作,而这实际上是不可能的。是这样吗?

*默认情况下,NIX系统不应该生成终端窗口,因此您可能只需要在windows上执行一些特殊操作

如果您可以包装WinMain函数,也就是说,在其周围放置
#define
保护,并调用另一个函数,该函数在其内部充当“real”
main
,然后在其他平台上从
main
调用该函数,那么应该不会出现重大问题

然而,我强烈建议尽可能避免使用宽字符(
wchar\t
),因为它们因平台而异,并通过内部存储所有字符串(例如UTF-8)来处理需要它们的特定于平台的API调用,将它们转换为(例如通过)仅进行API调用

基本上,非Windows平台需要您使用标准的
main
函数,Windows需要您使用
WinMain
。让它们都调用第三个函数,处理主函数应该执行的操作并返回


此外,任何Windows PE二进制(.exe文件)都只能在Windows上工作。不管你做什么,你都必须为每个平台分别编译你的程序。

看看链接器选项。链接器控制程序的可执行文件类型。
拥有多个
main
功能也是一种选择<代码>#ifdef可以控制每个平台将使用哪一个

也许我完全是在幻想能够在任何操作系统上运行相同的.exe程序


这是不可能的

这是一个老问题,但我刚刚发现了它,我认为它很有用,我按照user308323的建议得出了这个结论,一旦我将WIN32定义为Visual Studio项目中的预处理器,它就非常有效了

#ifdef WIN32
int wWinMain(HINSTANCE hInst, HINSTANCE hPreInst, LPWSTR nCmdLine, int nCmdShow)
#endif
#ifndef WIN32
int main(int argc, char **argv)
#endif

{
    Model model;
    UIController controller(model);

    controller.run(NULL, NULL);
}
请注意,我只更改了函数签名,并将null作为argc和argv参数发送,我们无论如何都不需要它们,因为这不是命令行程序


关于能够在每个平台上使用相同的.exe,这是不可能的,但只要您能够在不同的平台上编译相同的程序,这就不是问题。这就是FLTK库的用途。

您是否尝试编译并运行此库?如果它没有像他们说的那样工作,那么就提交一个bug.Understand。如果不可能在任何操作系统上运行相同的程序,那么为什么会有跨平台库?@creditemei'mAN00b,这样您就可以在所有平台上编译相同的代码。没有人喜欢维护100多个代码树……过去我在没有
WinMain
的情况下使用FLTK for Windows/Linux,在Linux上使用gcc,在Windows上使用mingw。使用mingw for Windows,我很确定您不需要设置任何选项就可以使其成为窗口应用程序,我认为这是默认设置。