打印

请教VC编程高手,

[复制链接]
10429|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
cn_wu|  楼主 | 2009-5-28 23:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

VC6 在XP系统,可以编译源文件(compile),却不能执行exe文件(build),是怎么回事呢?俺本来是从事硬件设计的,最近才兴趣用API编程,望高手们不吝赐教.源程序如下:




#include <windows.h>

LPCTSTR lpszAppName=TEXT("MyApp");
LPCTSTR lpszTitle=TEXT("My Application");

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

HINSTANCE hInstance;


int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
     MSG msg;
     HWND hwnd;
     WNDCLASS wc;

     wc.style=CS_HREDRAW|CS_VREDRAW;
     wc.lpfnWndProc=(WNDPROC)WndProc;
     wc.cbClsExtra=0;
     wc.cbWndExtra=0;
     wc.hInstance=hInstance;
     wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
     wc.hCursor=LoadCursor(NULL,IDC_ARROW);
     wc.hbrBackground=HBRUSH(GetStockObject(WHITE_BRUSH));
     wc.lpszMenuName=NULL;
     wc.lpszClassName=lpszAppName;


     RegisterClass(&wc);

     hwnd=CreateWindow(
         lpszAppName,
         lpszTitle,
         WS_OVERLAPPEDWINDOW,
         CW_USEDEFAULT,
         0,
         CW_USEDEFAULT,
         0,
         NULL,
         NULL,
         hInstance,
         NULL
         );


     ShowWindow(hwnd,nCmdShow);
     UpdateWindow(hwnd);
     while (GetMessage(&msg,NULL,0,0))
     {
            TranslateMessage(&msg);
       DispatchMessage(&msg);
     }

    return msg.wParam;


}


LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
    char MsgLBTN[]="L botton";
    char MsgRBTN[]="R botton";
    switch (message)
    {
    case WM_RBUTTONDOWN:
            MessageBeep(MB_ICONINFORMATION);
            
   MessageBox(GetFocus(),MsgRBTN,"Message",MB_OK|MB_ICONINFORMATION);
            break;

    case WM_LBUTTONDOWN:
            MessageBeep(MB_ICONINFORMATION);
            
MessageBox(GetFocus(),MsgLBTN,"Message",MB_OK|MB_ICONINFORMATION);
            break;

    case WM_DESTROY:
            PostQuitMessage(0);
            break;

    default:
            DefWindowProc(hwnd,message,wParam,lParam);

    }

    return 0;


}


上面源码只是要实现简单的界面,当有鼠标按键按下时出现提示框并喇叭会叫一下.

在VC6.0中建立工程,将源文件命名为a.cpp,执行compile,出现以后提示:

--------------------Configuration: a - Win32 Debug--------------------
Compiling...
a.cpp

a.obj - 0 error(s), 0 warning(s)


再执行build a.exe,却出现:


--------------------Configuration: a - Win32 Debug--------------------
Linking...
LINK : fatal error LNK1168: cannot open Debug/a.exe for writing
Error executing link.exe.

a.exe - 1 error(s), 0 warning(s)



在工程的文件夹下有一debug文件夹,之中有一个名为a的无后缀文件.


请问是什么原因使得不能执行程序呢?
奇怪的是,我记得以前也曾编译类似的源文件,但没有问题(操作系统重装过几个不同版本了),但在一段时间后莫名其妙就这样不能执行程序了.

相关帖子

沙发
cn_wu|  楼主 | 2009-5-28 23:19 | 只看该作者

续上,

VC与XP一样,也重装了好几次,但结果一样.

使用特权

评论回复
板凳
McuPlayer| | 2009-5-28 23:38 | 只看该作者

不玩SDK好多年

那东西重复劳动太多了

使用特权

评论回复
地板
cn_wu|  楼主 | 2009-5-28 23:58 | 只看该作者

无计,

最近想搞个上位机小程序。

但主贴这个问题好象本身不是源码有问题。

使用特权

评论回复
5
cn_wu|  楼主 | 2009-5-29 02:30 | 只看该作者

呵呵,


问题自己解决,多谢谷歌找到的资料给我灵感.好象碰到和我一样的问题的人还不少,互相学习,为了大家少走弯路,我还是说一下。
其实在build 之后执行excute exe,程序一直就在运行了,只不过代码有错误,窗口不能出现,我误以为VC有问题,多按了几下build和excute exe,结果多个进程实例在运行(按CTRL+ALT+DEL,在进程表中就可以看到有多个a.exe在运行),其实在按第二下build,就会出现下面的错误了:

--------------------Configuration: a - Win32 Debug--------------------
Linking...
LINK : fatal error LNK1168: cannot open Debug/a.exe for writing
Error executing link.exe.

a.exe - 1 error(s), 0 warning(s)

在上面r窗口函数改为:

LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
{
    char MsgLBTN[]="You keydown L botton";
    char MsgRBTN[]="You keydown R botton";


    int x;


         HDC hdc;
         PAINTSTRUCT ps;

    switch (message)
    {
          case WM_PAINT:
            hdc=BeginPaint(hwnd,&ps);
            EndPaint(hwnd,&ps);
            x=0;
            break;

    case WM_RBUTTONDOWN:
            MessageBeep(MB_ICONINFORMATION);
            
MessageBox(GetFocus(),MsgRBTN,"Message",MB_OK|MB_ICONINFORMATION);
            x=0;
            break;

    case WM_LBUTTONDOWN:
            MessageBeep(MB_ICONINFORMATION);
            
MessageBox(GetFocus(),MsgLBTN,"Message",MB_OK|MB_ICONINFORMATION);
            x=0;
            break;

    case WM_DESTROY:
            PostQuitMessage(0);
            x=0;
            break;

    default:
            
                  x=DefWindowProc(hwnd,message,wParam,lParam);

    }

    return (x);


}

 
上面红字是新加改进的主要内容。然后热键激活进程表,在进程表中关闭多之前误操作的多个a.exe进程,全部删除。此时重新compile和build,就可以执行excute exe命令了。


使用特权

评论回复
6
high| | 2009-5-29 11:08 | 只看该作者

不错. 集腋成裘.

使用特权

评论回复
7
fengfeng| | 2009-8-2 09:51 | 只看该作者
为什么不用MFC呢?

使用特权

评论回复
8
x32k| | 2009-9-9 17:54 | 只看该作者
SDK编写的程序,可移植性好,执行效率高
而MFC编写生成的可执行文件,一定要绑定MFC42.DLL或者文件大

支持SDK

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

17

帖子

0

粉丝