inking...
xilink6: executing 'D:\PROGRA~1\MICROS~4\VC98\Bin\link.exe'
LIBCD.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Debug/ipfilter.exe : fatal error LNK1120: 1 unresolved externals
Error executing xilink6.exe.ipfilter.exe - 2 error(s), 0 warning(s)源码是来自http://www.vckbase.com/document/viewdoc/?id=643#A4 ipfilter.dll的源码
下面是源码#define  UNICODE
#define  _UNICODE#include <ws2spi.h>
#include <tchar.h>
#pragma comment( lib, "ws2_32.lib" ) /*这句不能少。*/GUID  filterguid={0x4d1e91fd,0x116a,0x44aa,{0x8f,0xd4,0x1d,0x2c,0xf2,0x7b,0xd9,0xa9}};LPWSAPROTOCOL_INFOW  protoinfo=NULL;
WSPPROC_TABLE        nextproctable;
DWORD                protoinfosize=0;
int                  totalprotos=0;BOOL getfilter()
{
int    errorcode; protoinfo=NULL;
protoinfosize=0;
totalprotos=0; if(WSCEnumProtocols(NULL,protoinfo,&protoinfosize,&errorcode)==SOCKET_ERROR)
{
if(errorcode!=WSAENOBUFS)
{
OutputDebugString(_T("First WSCEnumProtocols Error!")); 
return FALSE;
}
} if((protoinfo=(LPWSAPROTOCOL_INFOW)GlobalAlloc(GPTR,protoinfosize))==NULL)
{
OutputDebugString(_T("GlobalAlloc Error!"));                
return FALSE;
} if((totalprotos=WSCEnumProtocols(NULL,protoinfo,&protoinfosize,&errorcode))==SOCKET_ERROR)
{
OutputDebugString(_T("Second WSCEnumProtocols Error!"));   
return FALSE;
} return TRUE;
}void freefilter()
{
GlobalFree(protoinfo);
}BOOL WINAPI DllMain(HINSTANCE hmodule,
DWORD     reason,
LPVOID    lpreserved)
{
TCHAR   processname[MAX_PATH];
TCHAR   showmessage[MAX_PATH+25];
if(reason==DLL_PROCESS_ATTACH)
{
GetModuleFileName(NULL,processname,MAX_PATH);
_tcscpy(showmessage,processname);
_tcscat(showmessage,_T(" Loading IPFilter ..."));
OutputDebugString(showmessage);  
}
return TRUE;
}int WSPAPI WSPSendTo(SOCKET s,
  LPWSABUF         lpbuffer,
  DWORD            dwbuffercount,
  LPDWORD          lpnumberofbytessent,
  DWORD            dwflags,
  const struct     sockaddr FAR *lpto,
  int              itolen,
  LPWSAOVERLAPPED  lpoverlapped,
  LPWSAOVERLAPPED_COMPLETION_ROUTINE  lpcompletionroutine,
  LPWSATHREADID    lpthreadid,
  LPINT            lperrno)
{ struct sockaddr_in sin; sin=*(const struct sockaddr_in *)lpto;
if(sin.sin_port==htons(8000))        
{
OutputDebugString(_T("WSPSendTo Tencent Filtered"));
return 0;
}
else
{
return nextproctable.lpWSPSendTo(s,lpbuffer,dwbuffercount,
lpnumberofbytessent,dwflags,lpto,itolen,
lpoverlapped,lpcompletionroutine,lpthreadid,lperrno);
}
}int WSPAPI WSPStartup( WORD wversionrequested,LPWSPDATA lpwspdata,LPWSAPROTOCOL_INFOW lpprotoinfo,WSPUPCALLTABLE upcalltable,LPWSPPROC_TABLE lpproctable)
{
OutputDebugString(_T("IPFilter WSPStartup ...")); int           i;
int           errorcode; 
int           filterpathlen;
DWORD         layerid=0; 
DWORD         nextlayerid=0;
TCHAR         *filterpath;
HINSTANCE     hfilter;
LPWSPSTARTUP  wspstartupfunc=NULL; if(lpprotoinfo->ProtocolChain.ChainLen<=1)
{
OutputDebugString(_T("ChainLen<=1"));  
return FALSE;
} getfilter(); for(i=0;i<totalprotos;i++)
{
if(memcmp(&protoinfo[i].ProviderId,&filterguid,sizeof(GUID))==0)
{
layerid=protoinfo[i].dwCatalogEntryId;
break;
}
} for(i=0;i<lpprotoinfo->ProtocolChain.ChainLen;i++)
{
if(lpprotoinfo->ProtocolChain.ChainEntries[i]==layerid)
{
nextlayerid=lpprotoinfo->ProtocolChain.ChainEntries[i+1];
break;
}
} filterpathlen=MAX_PATH;
filterpath=(TCHAR*)GlobalAlloc(GPTR,filterpathlen);  
for(i=0;i<totalprotos;i++)
{
if(nextlayerid==protoinfo[i].dwCatalogEntryId)
{
if(WSCGetProviderPath(&protoinfo[i].ProviderId,filterpath,&filterpathlen,&errorcode)==SOCKET_ERROR)
{
OutputDebugString(_T("WSCGetProviderPath Error!"));  
return WSAEPROVIDERFAILEDINIT;
}
break;
}
} if(!ExpandEnvironmentStrings(filterpath,filterpath,MAX_PATH))
{
OutputDebugString(_T("ExpandEnvironmentStrings Error!"));    
return WSAEPROVIDERFAILEDINIT;
} if((hfilter=LoadLibrary(filterpath))==NULL)
{
OutputDebugString(_T("LoadLibrary Error!")); 
return WSAEPROVIDERFAILEDINIT;
} if((wspstartupfunc=(LPWSPSTARTUP)GetProcAddress(hfilter,"WSPStartup"))==NULL)
{
OutputDebugString(_T("GetProcessAddress Error!"));  
return WSAEPROVIDERFAILEDINIT;
} if((errorcode=wspstartupfunc(wversionrequested,lpwspdata,lpprotoinfo,upcalltable,lpproctable))!=ERROR_SUCCESS)
{
OutputDebugString(_T("wspstartupfunc Error!"));  
return errorcode;
} nextproctable=*lpproctable;
lpproctable->lpWSPSendTo=WSPSendTo; freefilter();
return 0;
}

解决方案 »

  1.   

    改链接选项
    在Project中的Setting中,选Link选项,下面的文本框里把/subsystem:console改为/subsystem:windows
      

  2.   

    已经该了,还是错误,变成这样
    Compiling...
    ipfilter.cpp
    Linking...
    xilink6: executing 'D:\PROGRA~1\MICROS~4\VC98\Bin\link.exe'
    LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
    Debug/ipfilter.exe : fatal error LNK1120: 1 unresolved externals
    Error executing xilink6.exe.ipfilter.exe - 2 error(s), 0 warning(s)
    下面是我link 里所有的所有的参数
    kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/ipfilter.pdb" /debug /machine:I386 /out:"Debug/ipfilter.exe" /pdbtype:sept
      

  3.   

    对的,应该是开关没设对,改成windows应该可以
      

  4.   

    这个应该是个dll ,是不是 vc 把它当成exe 来编译了,就出现这样的错误?应该怎么改?
      

  5.   

    搞掂了,重新建一个dll 工程然后编译就ok 了,谢谢楼上几位老哥~~