Pelles C编译时出现的“POLINK: fatal error: 拒绝访问”问题的一种可能成因

在使用PellesC编译程序时,第一遍能正常编译执行,第二遍就无法编译,出现以下问题提示:

Building NEWprogram2.exe.

POLINK: fatal error: 拒绝访问。

*** Error code: 1 ***

Done.

上网查了一下,没有和我类似情形的,所以也没有办法解决。但是记得昨天编译时出现这种问题是因为执行后的窗口程序没有关闭导致的。于是我查了任务管理器里面的“详细信息”面板下内容,发现果然有名为“NEWprogram2.EXE”的程序执行中,并没有完全退出关闭。

也就是说,关闭了窗口界面后并没有杀死相应的进程,因此再次Build时就会出现问题。

解决办法也就是问题的所在,在源程序中添加关闭相应进程的函数。

<程序中7-9行的代码就是解决问题的关键>

 1 LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 2 {
 3     // ...
 4     switch(msg)
 5     {
 6         // ...
 7         case WM_DESTROY:  // 窗口销毁,点击右上角的关闭按钮会触发此消息
 8             PostQuitMessage(0);
 9             break;
10         // ...
11         default:
12             return DefWindowProc(hwnd, msg, wParam, lParam);    
13     }
14     return 0;
15 }

添加了相应的代码后,关闭窗口同时就会注销掉相应的进程。

接下来简单介绍一下WM_DESTROY和PostQuitMessage:

*************************************************

<以下解释来源于网络>

WM_DESTROY消息作用:Windows正在根据使用者的指示关闭窗口。该消息是使用者单击Close按钮或者在程序的系统菜单上选择 Close时发生的。

MainWndProc通过呼叫PostQuitMessage以标准方式响应WM_DESTROY消息:

1 PostQuitMessage (0) ;

该函数在程序的消息队列中插入一个WM_QUIT消息。GetMessage对于除了WM_QUIT之外的从消息队列中取出的所有消息都传回非0值。而当GetMessage得到一个WM_QUIT消息时,它传回0。这将导致WinMain退出消息循环,然后return叙述将退出WinMain并终止程序。

*************************************************

对于新手来说,上面的解释已经能够满足我的好奇心了,而更加深入的解释目前我还没有在网络上或者哪里找到,有时间我要查看一下Windows API命令大全。

这里我又要忍不住提到微软的MSDN了。

<MSDN库中的相应解释>

本来遇到不懂的问题就已经很蛋疼了,看到微软官方提供的文档这么解释,我立马就听到了蛋碎的声音。不是指我看不懂英文,而是这解释也太不详细了吧?微软推出了Windows API,那么理应微软的解释是最官方的解释。可是这种解释也太民间了。反正我对微软各种有意见。

posted @ 2014-01-10 19:08  Jose的Blog  阅读(1938)  评论(0编辑  收藏  举报