标签: winmain

什么是消息泵?

这个帖子(大约一年前发布)中,讨论了在非交互式会话中运行Word时可能遇到的问题.那里给出的(非常强烈的)建议不会这样做.在一篇文章中,它表示"Office API都假设您在桌面上的交互式会话中运行Office,具有监视器,键盘和鼠标,最重要的是消息泵." 我不确定那是什么.(我用C#编程只用了一年左右;我的其他编程经验主要是使用ColdFusion.)

更新:

我的程序运行大量RTF文件,以提取用于构建医疗报告编号的两条信息.我没有尝试弄清楚RTF中的格式化指令是如何工作的,而是决定只在Word中打开它们并从那里拉出文本(而不是实际启动GUI).有时,程序在处理一个文件的中间打嗝,并留下了一个字线打开该文件附有(我仍然要弄清楚如何关闭一个向下).当我重新运行程序时,我当然得到一个通知,说有一个线程正在使用该文件,我是否想要打开一个只读副本?当我说"是"时,Word GUI突然突然冒出来并开始处理文件.我想知道为什么会这样; 但看起来可能一旦弹出对话框,消息泵开始将主GUI推送到Windows?

c# winapi message-pump winmain

95
推荐指数
5
解决办法
4万
查看次数

WINMAIN和C++中的main()(扩展)

是的,我看过这篇文章:WinMain,main和Cll中的DllMain之间的区别

我现在知道它WINMAIN用于窗口应用程序和main()控制台.但阅读这篇文章并没有真正告诉我为什么到底有什么区别.

我的意思是将不同的电源功能分离到程序的开始是什么意思?是因为性能问题?或者它是什么?

c++ windows program-entry-point winmain

54
推荐指数
2
解决办法
6万
查看次数

主要功能中的"WINAPI"是什么意思?

你能告诉我功能中的这个WINAPIWinMain()吗?

用最简单的方式..

#include <windows.h>

int -->WINAPI<-- WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, int nCmdShow)
{
    MessageBox(NULL, "Goodbye, cruel world!", "Note", MB_OK);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它只是一些Windows时髦模式吗?

它有什么作用?或者更确切地说,我还没有遇到过这个C++特性是什么?

c c++ windows winapi winmain

49
推荐指数
3
解决办法
3万
查看次数

WinMain,main和Cll中的DllMain之间的区别

这三个函数之间有什么区别以及何时使用它们?

c++ windows winmain entry-point

20
推荐指数
2
解决办法
1万
查看次数

"APIENTRY _tWinMain"和"WINAPI WinMain"的区别

这两个功能有什么区别?:

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)

int WINAPI WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi winmain

18
推荐指数
2
解决办法
3万
查看次数

__in __out __in_opt __allowed()的目的是什么,它们如何工作?我应该在自己的代码中使用类似的结构吗?

其中一些预处理器定义位于WinMain函数和其他Windows库函数中.他们的目的是什么?他们是如何工作的?将它们写入您的实现或函数调用是一种好习惯吗?

我最初的研究表明,他们只是设置为:

#define __in 
#define __out
#define __in_opt
Run Code Online (Sandbox Code Playgroud)

意味着它们在预处理器传递中没有被替换.它们只是一种文档方法,没有任何功能吗?

如果是这样,我可以看到像这样记录代码的优势.像doxygen这样的东西你需要写出两次参数名称.因此,理论上这有助于减少重复,并保持一致性......

我没有关于如何__allowed()运作的理论.

c c++ com winmain

17
推荐指数
3
解决办法
1万
查看次数

如何在不使用WinMain的情况下编写Windows应用程序?

用C/C++编写的Windows GUI应用程序将'WinMain'作为入口点(而不是'main').我对此的理解是编译器生成一个'main'函数,由C Runtime调用.这个'main'函数为GUI设置必要的环境并调用'WinMain'(指定实例句柄等).

简而言之,我认为控制台和GUI应用程序的启动方式有以下不同之处:

控制台应用程序:C运行时 - >'主'功能(手动编码)

GUI应用程序:C运行时 - >'main'函数(编译生成) - >'WinMain'函数(手工编码)

我想验证这种理解并找出如何用一个'main'函数手动编写Windows GUI(即无需编写'WinMain').

c winapi program-entry-point crt winmain

14
推荐指数
3
解决办法
9953
查看次数

_WinMainCRTStartup执行哪些功能?

这是一系列至少两个密切相关但不同的问题的一部分.我希望我能分别问他们做对了.

我试图让我的Visual C++ 2008应用程序在没有C运行时库的情况下工作.这是一个没有MFC或其他花哨的东西的Win32 GUI应用程序,只是简单的Windows API.

所以我将Project Properties - > Configuration - > C/C++ - > Advanced - > Omit Default Library Names设置为Yes(编译器标志/Zl)并重建.

然后链接器抱怨外部未解决_WinMainCRTStartup.可以说,我可以告诉链接器使用不同的入口点MyStartup.从我在网上收集的内容,_WinMainCRTStartup做一些初始化的东西,我可能想做MyStartup一个子集.

所以我的问题是:如果我不使用CRT,哪些功能可以_WinMainCRTStartup执行,哪些可以省略?

如果您对这些内容有所了解,请查看我的其他问题.谢谢!

旁白:我为什么要首先这样做?

  1. 我的应用程序没有明确使用任何CRT功能.
  2. 我喜欢精益和平均的应用程序.
  3. 它会教我一些新东西.

crt winmain entry-point visual-c++

13
推荐指数
3
解决办法
1万
查看次数

对 WinMain (C++ Mingw) 的未定义引用

目前我正在尝试使用 C++ 制作一个 Windows 应用程序。为了编译我的程序,我使用 Mingw GCC。顺便说一句,我在 Windows 10 上。但是一旦我使用int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)而不是int main()编译器,就会显示以下消息:

C:/mingw-w64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/.. /lib/libmingw32.a(lib64_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x2e):未定义对`WinMain' collect2.exe的引用:错误:ld返回1退出状态终端进程因退出而终止代码:1

我尝试编译的示例代码来自此 Windows 应用程序教程: 示例代码

我已经尝试重新安装 mingw 但它没有帮助。这就是为什么我希望这里有人可以帮助我解决我的问题。先感谢您!

c++ winapi mingw winmain mingw32

11
推荐指数
2
解决办法
2万
查看次数

Qt + MinGW +对"WinMain @ 16"问题的另一个未定义的引用

我知道,我挖了整个互联网,以找出问题是什么,到目前为止没有任何帮助.

我在Windows 7上,使用:

Qt 4.8.3: https://download.qt.io/archive/qt/4.8/4.8.3/qt-win-opensource-4.8.3-mingw.exe
MinGW32 4.4.0: http://nosymbolfound.blogspot.com/2012/12/since-until-now-qt-under-windows-is.html
Run Code Online (Sandbox Code Playgroud)

我分叉了一个名为QLC的项目,但是作者没有给我支持在Windows上编译.我按照他的指示,但我猜他们已经过时了.

我可以用Qt Creator编译任何Qt演示示例,所以我相信我的系统工作正常.
在尝试编译程序时,我遇到了众所周知的问题:

g++ -enable-auto-import -o libqlcengine.a object_script.libqlcengine.Debug  -L".\lib" -L"c:\Qt\4.8.3\lib" -lwinmm -L../../hotplugmonitor/src -lhotplugmonitor -lQtScriptd4 -lQtXmld4 -lQtGuid4 -lQtCored4
c:/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../libmingw32.a(main.o):main.c:(.text+0x104): undefined reference to `WinMain@16'
Run Code Online (Sandbox Code Playgroud)

(object_script.libqlcengine.Debug是一个很长的.o文件列表)
现在,在构建它的时候,它试图链接一个静态.a库,所以我认为没有理由让MinGW寻找WinMain.我做了grep'WinMain'并且在整个源代码树上找不到任何结果.

如果要查看原始来源:

svn co https://qlc.svn.sourceforge.net/svnroot/qlc qlc
Run Code Online (Sandbox Code Playgroud)

或者我的分叉版本:

git clone git://git.code.sf.net/p/qlcplus/code qlcplus-code
Run Code Online (Sandbox Code Playgroud)

他们有相同的结果.
伙计们,我在这里失踪了什么?我尝试了一大堆C标志(-mwindows -lmingw32 -DQT_NEEDS_MAIN -lqtmain),但都没有.

有什么神奇的吗?

PS当然我可以在Linux上构建i386/amd64

解决了:

我只需要将以下行添加到创建库的.pro文件中:

win32:QMAKE_LFLAGS += -shared
Run Code Online (Sandbox Code Playgroud)

windows qt mingw winmain

10
推荐指数
1
解决办法
6293
查看次数

标签 统计

winmain ×10

c++ ×6

winapi ×5

windows ×5

c ×3

crt ×2

entry-point ×2

mingw ×2

program-entry-point ×2

c# ×1

com ×1

message-pump ×1

mingw32 ×1

qt ×1

visual-c++ ×1