回 帖 发 新 帖 刷新版面

主题:头文件无法打开,请指教!

--------------------Configuration: udp1 - Win32 Debug--------------------
Compiling...
udp1.cpp
e:\软件编程系列\c++源代码\网络编程课程实例\udp1.cpp(1) : fatal error C1083: Cannot open include file: 'stdafx.h': No such file or directory
Error executing cl.exe.

udp1.obj - 1 error(s), 0 warning(s)


小弟在编译时返回这个错误,很是不明白问题出在哪.
特意查找了这个头文件,发现这个头文件分别存在于:
G:\Visual C++ 6.0\VC98\ATL\SRC
G:\Visual C++ 6.0\VC98\MFC\SRC
G:\Visual C++ 6.0\VFP98\API\SAMPLES\FOXTLIB

不知道是不是新建文件时出现错误,如果是,那具体操作的步骤应该是什么?
下面是源代码,是一个基于Winsock API的UDP小程序.
[code=c]
#include "stdafx.h"
#include <Winsock.h>

HINSTANCE hInst;
LRESULT CALLBACK    WndProc(HWND,UINT,WPARAM,LPARAM);
///////////////////////////////////////////////////////////////////////
int APIENTRY WinMain(HINSTANCE hI,HINSTANCE hP,LPSTR lp,int nC)
{
    MSG msg;
    HWND hWnd;
    //实现句柄存入全局量hInst
    hInst=hI;
    WNDCLASS wc;
    memset(&wc,0,sizeof(WNDCLASS));
    wc.lpfnWndProc        =(WNDPROC)WndProc;
    wc.hInstance        =hI;
    wc.hIcon            =LoadIcon(NULL,IDI_APPLICATION);
    wc.hbrBackground    =(HBRUSH)COLOR_WINDOW;
    wc.lpszClassName    ="W1";
    RegisterClass(&wc);
    hWnd=CreateWindowEx(WS_EX_PALETTEWINDOW,"W1","UDP程序1[端口:8000]",
                        WS_OVERLAPPEDWINDOW,
                        100,100,200,100,
                        NULL,NULL,hI,NULL);
    if(!hWnd)
        return FALSE;
        ShowWindow(hWnd,nC);
    //主消息循环
    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}

////////////////////////////////////////////////////////////////////////
//定义Winsock API需要的量
WSADATA ws;
SOCKET    s1,s2;
struct    sockaddr_in    Cs1A,Cs2A;
//发送数据缓冲
char    sendBuf[200];
//接收数据缓冲
char    recvBuf[200];
int        len;                    //存放接收到的字节数

#define    Cs1Port 8000            //本地端口
#define    Cs2Port    6000            //远程端口
#define Cs1IP    "127.0.0.1"        //本地IP
#define Cs2IP    "127.0.0.1"     //远程IP
///////////////////////////////////////////////////////////////////////
//消息处理
LRESULT CALLBACK WndProc(HWND hW,UINT msg,WPARAM wP,LPARAM lP)
{
    switch(msg)
    {
    case WM_DESTROY:
        WSAAsyncSelect(s1,hW,0,0);
        closesocket(s1);
        WSACleanup();
        PostQuitMessage(0);
        break;
    case WM_CREATE:
        WSAStartup(0x0202,&ws);
        s1=socket(AF_INET,SOCK_DGRAM,0);
        Cs1A.sin_family=AF_INET;
        Cs1A.sin_port=htons(Cs1Port);
        Cs1A.sin_addr.s_addr=inet_addr(Cs1IP);
        len=bind(s1,(struct sockaddr*)&Cs1A,sizeof(Cs1A));
        Cs2A.sin_family=AF_INET;
        Cs2A.sin_port=htons(Cs2Port);
        Cs2A.sin_addr.s_addr=inet_addr(Cs2IP);
        WSAAsyncSelect(s1,hW,WM_USER+1,FD_READ);
        Beep(2000,200);
        break;
    case WM_USER+1:
        switch(LOWORD(lP))
        {
        case FD_READ:
            len=recv(s1,recvBuf,sizeof(recvBuf),0);
            recvBuf[len]=0;
            MessageBox(0,recvBuf,"UDP程序1从UDP程序2收到的数据",MB_OK);
            break;
        }
        break;
    case WM_LBUTTONDOWN:
        wsprintf(sendBuf,"Hello,UDP程序2!");
        len=sizeof(Cs2A);
        sendto(s1,sendBuf,strlen(sendBuf),0,(struct sockaddr*)&Cs2A,len);
        break;
    }
    return DefWindowProc(hW,msg,wP,lP);
}

[/code]

回复列表 (共4个回复)

沙发

奇怪,应该不会报这个错啊!
可能是vc编译器有问题,你新建个MFC工程试试,如果新的工作也这样,哪说明是编译器有问题,当然也有个解决办法,就是用全路径 #include "G:\Visual C++ 6.0\VC98\MFC\SRC\stdafx.h"

板凳

谢谢您`只是我初学VC,这样做编译可以通过,但是链接却不能通过!
我直接使用源文件进行编译链接,是采取在工程-设置-link中的对象/库模块中添加ws2_32lib文件来链接的(我的课本上有这样的方法,但是不是这个程序的方法编译,是控制台的方法,使用MFC的方法我还不会.),出现这样的错误:

Linking...
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/udp1.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

麻烦您再给看下!

3 楼

我猜你是直接打开(或编辑)了一个Winmain程序就Build。VC++此时假定你要建立Console程序而不是GUI程序,而 Console程序的Startup Code要载入的是main()而不是Winmain(),导致连接失败。改正的方法是将菜单Project/Settings下Link项Option 内的/subsystem:console改为/subsystem:windows。更稳妥的做法是以后先New一个Win32 GUI Project,再拷贝入你的程序,再Build。
_________________________________________________________________________________________
     这是我在百度上搜来的,你试试,以后遇到问题先到网上搜搜,不少问题别人都遇到过的

4 楼

万分感谢!虽然其中的道理我不是很明白,但是还是执行出来了,谢谢!
看样子我还是应该好好看书了,应该有这个编译方法的``我中间跳过了30多页呢
谢谢!

我来回复

您尚未登录,请登录后再回复。点此登录或注册