CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  工具平台和程序库

vc6.0 编译时出现两个问题 ( 二手转帖 )

楼主languagec(各有所求)2006-03-03 18:49:53 在 C/C++ / 工具平台和程序库 提问

2.2   例子程序  
  自己写一个例子程序似乎不可行,如果您已经能自己写一个SNMP程序了,那么这篇文章就不要看了吧。我们直接用一个MSDN上的例子吧。在VS6的Msdn上有这么一个例子在...\Samples\VC98\SDK\NETDS\SNMP\SNMPUTIL下面。有意思的是这个例子的Readme里面也没有讲运行的时候需要什么条件。可以理解的原因是这种程序不是用在本机PC上的,而是控制路由器等远程网络设备的。  
   
  虽然相信很多地方都可以找到这个程序,但是我还是把它的代码贴到这里,一来显得文章有了“份量”。二来为了给少数机器上没有装全msdn的人一个方便。三来这个代码我稍微做了一点修改,在出错的时候打印出了出错原因的字符描述,原来的例子给出的是整数的代码。让人不能直观地知道是什么原因。  
   
  这个例子是console程序,没有任何窗体、对话框。而且就一个.C文件,也很方便贴出来。另外还有一个MAKEFILE文件,这里就不列出了。  
   
  以下是SNMPUTIL.C文件:  
   
  /*++   BUILD   Version:   0001         //   Increment   this   if   a   change   has   global   effects  
   
      Copyright   (c)   1991-1995     Microsoft   Corporation  
       
          Module   Name:  
           
              snmputil.c  
               
                  Abstract:  
                   
                      Sample   SNMP   Management   API   usage   for   Windows   NT.  
                       
                          This   file   is   an   example   of   how   to   code   management   applications   using  
                          the   SNMP   Management   API   for   Windows   NT.     It   is   similar   in   operation   to  
                          the   other   commonly   available   SNMP   command   line   utilities.  
                           
                              Extensive   comments   have   been   included   to   describe   its   structure   and  
                              operation.     See   also   "Microsoft   Windows/NT   SNMP   Programmer's   Reference".  
                               
                                  Created:  
                                   
                                      28-Jun-1991  
                                       
                                          Revision   History:  
                                           
  --*/  
   
   
  static   char   *vcsid   =   "@(#)   $Logfile:       N:/agent/mgmtapi/vcs/snmputil.c_v     $   $Revision:       1.5     $";  
   
   
  //   General   notes:  
  //       Microsoft's   SNMP   Management   API   for   Windows   NT   is   implemented   as   a   DLL  
  //   that   is   linked   with   the   developer's   code.     These   APIs   (examples   follow   in  
  //   this   file)   allow   the   developer's   code   to   generate   SNMP   queries   and   receive  
  //   SNMP   traps.     A   simple   MIB   compiler   and   related   APIs   are   also   available   to  
  //   allow   conversions   between   OBJECT   IDENTIFIERS   and   OBJECT   DESCRIPTORS.  
   
   
  //   Necessary   includes.  
   
  #include   <windows.h>  
   
  #include   <stdio.h>  
  #include   <string.h>  
  #include   <malloc.h>  
   
  #include   <snmp.h>  
  #include   <mgmtapi.h>  
   
   
  //   Constants   used   in   this   example.  
   
  #define   GET           1  
  #define   GETNEXT   2  
  #define   WALK         3  
  #define   TRAP         4  
   
  #define   TIMEOUT   6000   /*   milliseconds   */  
  #define   RETRIES   3  
   
   
  //   Main   program.  
   
  INT   _CRTAPI1   main(  
                                      IN   int     argumentCount,  
                                      IN   char   *argumentVector[])  
                                       
  {  
          INT                                 operation;  
          LPSTR                             agent;  
          LPSTR                             community;  
          RFC1157VarBindList   variableBindings;  
          LPSNMP_MGR_SESSION   session;  
           
          INT                 timeout   =   TIMEOUT;  
          INT                 retries   =   RETRIES;  
           
          BYTE               requestType;  
          AsnInteger   errorStatus;  
          AsnInteger   errorIndex;  
          char                 *chkPtr   =   NULL;  
           
           
          //   Parse   command   line   arguments   to   determine   requested   operation.  
           
          //   Verify   number   of   arguments...  
          if             (argumentCount   <   5   &&   argumentCount   !=   2)  
          {  
                  printf("Error:     Incorrect   number   of   arguments   specified.\n");  
                  printf(  
                          "\nusage:     snmputil   [get|getnext|walk]   agent   community   oid   [oid   ...]\n");  
                  printf(  
                          "                 snmputil   trap\n");  
                   
                  return   1;  
          }  
           
          //   Get/verify   operation...  
          argumentVector++;  
          argumentCount--;  
          if             (!strcmp(*argumentVector,   "get"))  
                  operation   =   GET;  
          else   if   (!strcmp(*argumentVector,   "getnext"))  
                  operation   =   GETNEXT;  
          else   if   (!strcmp(*argumentVector,   "walk"))  
                  operation   =   WALK;  
          else   if   (!strcmp(*argumentVector,   "trap"))  
                  operation   =   TRAP;  
          else  
          {  
                  printf("Error:     Invalid   operation,   '%s',   specified.\n",  
                          *argumentVector);  
                   
                  return   1;  
          }  
           
          if   (operation   !=   TRAP)  
          {  
                  if   (argumentCount   <   4)  
                  {  
                          printf("Error:     Incorrect   number   of   arguments   specified.\n");  
                          printf(  
                                  "\nusage:     snmputil   [get|getnext|walk]   agent   community   oid   [oid   ...]\n");  
                          printf(  
                                  "                 snmputil   trap\n");  
                           
                          return   1;  
                  }  
                   
                  //   Get   agent   address...  
                  argumentVector++;  
                  argumentCount--;  
                  agent   =   (LPSTR)SNMP_malloc(strlen(*argumentVector)   +   1);  
                  strcpy(agent,   *argumentVector);  
                   
                  //   Get   agent   community...  
                  argumentVector++;  
                  argumentCount--;  
                  community   =   (LPSTR)SNMP_malloc(strlen(*argumentVector)   +   1);  
                  strcpy(community,   *argumentVector);  
                   
                  //   Get   oid's...  
                  variableBindings.list   =   NULL;  
                  variableBindings.len   =   0;  
                   
                  while(--argumentCount)  
                  {  
                          AsnObjectIdentifier   reqObject;  
                           
                          argumentVector++;  
                           
                          //   Convert   the   string   representation   to   an   internal   representation.  
                          if   (!SnmpMgrStrToOid(*argumentVector,   &reqObject))  
                          {  
                                  printf("Error:   Invalid   oid,   %s,   specified.\n",   *argumentVector);  
                                   
                                  return   1;  
                          }  
                          else  
                          {  
                                  //   Since   sucessfull,   add   to   the   variable   bindings   list.  
                                  variableBindings.len++;  
                                  if   ((variableBindings.list   =   (RFC1157VarBind   *)SNMP_realloc(  
                                          variableBindings.list,   sizeof(RFC1157VarBind)   *  
                                          variableBindings.len))   ==   NULL)  
                                  {  
                                          printf("Error:   Error   allocating   oid,   %s.\n",  
                                                  *argumentVector);  
                                           
                                          return   1;  
                                  }  
                                   
                                  variableBindings.list[variableBindings.len   -   1].name   =  
                                          reqObject;   //   NOTE!     structure   copy  
                                  variableBindings.list[variableBindings.len   -   1].value.asnType   =  
                                          ASN_NULL;  
                          }  
                  }   //   end   while()  
                   
                  //   Make   sure   only   one   variable   binding   was   specified   if   operation  
                  //   is   WALK.  
                  if   (operation   ==   WALK   &&   variableBindings.len   !=   1)  
                  {  
                          printf("Error:   Multiple   oids   specified   for   WALK.\n");  
                           
                          return   1;  
                  }  
                   
                   
                  //   Establish   a   SNMP   session   to   communicate   with   the   remote   agent.     The  
                  //   community,   communications   timeout,   and   communications   retry   count  
                  //   for   the   session   are   also   required.  
                   
   
   
   
  问题点数:100、回复次数:4Top

1 楼languagec(各有所求)回复于 2006-03-03 18:53:58 得分 0

if   ((session   =   SnmpMgrOpen(agent,   community,   timeout,   retries))   ==   NULL)  
                  {  
                          printf("error   on   SnmpMgrOpen   %d\n",   GetLastError());  
                           
                          return   1;  
                  }  
                   
          }   //   end   if(TRAP)  
           
           
          //   Determine   and   perform   the   requested   operation.  
           
          if             (operation   ==   GET   ||   operation   ==   GETNEXT)  
          {  
                  //   Get   and   GetNext   are   relatively   simple   operations   to   perform.  
                  //   Simply   initiate   the   request   and   process   the   result   and/or  
                  //   possible   error   conditions.  
                   
                   
                  if   (operation   ==   GET)  
                          requestType   =   ASN_RFC1157_GETREQUEST;  
                  else  
                          requestType   =   ASN_RFC1157_GETNEXTREQUEST;  
                   
                   
                  //   Request   that   the   API   carry   out   the   desired   operation.  
                   
                  if   (!SnmpMgrRequest(session,   requestType,   &variableBindings,  
                          &errorStatus,   &errorIndex))  
                  {  
                          //   The   API   is   indicating   an   error.  
                           
                          printf("error   on   SnmpMgrRequest   %d\n",   GetLastError());  
                  }  
                  else  
                  {  
                          //   The   API   succeeded,   errors   may   be   indicated   from   the   remote  
                          //   agent.                          
                          switch(errorStatus)  
                          {  
                          case   SNMP_ERRORSTATUS_TOOBIG:  
                                  {  
                                          printf("SNMP_ERRORSTATUS_TOOBIG");  
                                          break;  
                                  }  
                          case   SNMP_ERRORSTATUS_NOSUCHNAME:  
                                  {  
                                          printf("SNMP_ERRORSTATUS_NOSUCHNAME");  
                                          break;  
                                  }  
                          case   SNMP_ERRORSTATUS_BADVALUE:  
                                  {  
                                          printf("SNMP_ERRORSTATUS_BADVALUE");  
                                          break;  
                                  }  
                          default:  
                                  break;  
                          }                          
                          if   (errorStatus   >   0)  
                          {  
                                  printf("Error:   errorStatus=%d,   errorIndex=%d\n",  
                                          errorStatus,   errorIndex);  
                          }  
                          else  
                          {  
                                  //   Display   the   resulting   variable   bindings.  
                                   
                                  UINT   i;  
                                  char   *string   =   NULL;  
                                   
                                  for(i=0;   i   <   variableBindings.len;   i++)  
                                  {  
                                          SnmpMgrOidToStr(&variableBindings.list[i].name,   &string);  
                                          printf("Variable   =   %s\n",   string);  
                                          if   (string)   SNMP_free(string);  
                                           
                                          printf("Value         =   ");  
                                          SnmpUtilPrintAsnAny(&variableBindings.list[i].value);  
                                           
                                          printf("\n");  
                                  }   //   end   for()  
                          }  
                           
                          //   Free   the   variable   bindings   that   have   been   allocated.                          
                          SnmpUtilVarBindListFree(&variableBindings);  
                  }  
          }  
          else   if   (operation   ==   WALK)  
          {  
                  //   Walk   is   a   common   term   used   to   indicate   that   all   MIB   variables  
                  //   under   a   given   OID   are   to   be   traversed   and   displayed.     This   is  
                  //   a   more   complex   operation   requiring   tests   and   looping   in   addition  
                  //   to   the   steps   for   get/getnext   above.  
                   
                   
                  AsnObjectIdentifier   root;  
                  AsnObjectIdentifier   tempOid;  
                   
                   
                  SnmpUtilOidCpy(&root,   &variableBindings.list[0].name);  
                   
                  requestType   =   ASN_RFC1157_GETNEXTREQUEST;  
                   
                   
                  while(1)  
                  {  
                          if   (!SnmpMgrRequest(session,   requestType,   &variableBindings,  
                                  &errorStatus,   &errorIndex))  
                          {  
                                  //   The   API   is   indicating   an   error.  
                                   
                                  printf("error   on   SnmpMgrRequest   %d\n",   GetLastError());  
                                   
                                  break;  
                          }  
                          else  
                          {  
                                  //   The   API   succeeded,   errors   may   be   indicated   from   the   remote  
                                  //   agent.  
                                   
                                   
                                  //   Test   for   end   of   subtree   or   end   of   MIB.  
                                   
                                  if   (errorStatus   ==   SNMP_ERRORSTATUS_NOSUCHNAME   ||  
                                          SnmpUtilOidNCmp(&variableBindings.list[0].name,  
                                          &root,   root.idLength))  
                                  {  
                                          printf("End   of   MIB   subtree.\n\n");  
                                           
                                          break;  
                                  }  
                                   
                                   
                                  //   Test   for   general   error   conditions   or   sucesss.  
                                   
                                  if   (errorStatus   >   0)  
                                  {  
                                          printf("Error:   errorStatus=%d,   errorIndex=%d   \n",  
                                                  errorStatus,   errorIndex);  
                                           
                                          break;  
                                  }  
                                  else  
                                  {  
                                          //   Display   resulting   variable   binding   for   this   iteration.  
                                           
                                          char   *string   =   NULL;  
                                           
                                          SnmpMgrOidToStr(&variableBindings.list[0].name,   &string);  
                                          printf("Variable   =   %s\n",   string);  
                                          if   (string)   SNMP_free(string);  
                                           
                                          printf("Value         =   ");  
                                          SnmpUtilPrintAsnAny(&variableBindings.list[0].value);  
                                           
                                          printf("\n");  
                                  }  
                          }   //   end   if()  
                           
                           
                          //   Prepare   for   the   next   iteration.     Make   sure   returned   oid   is  
                          //   preserved   and   the   returned   value   is   freed.  
                           
                          SnmpUtilOidCpy(&tempOid,   &variableBindings.list[0].name);  
                           
                          SnmpUtilVarBindFree(&variableBindings.list[0]);  
                           
                          SnmpUtilOidCpy(&variableBindings.list[0].name,   &tempOid);  
                          variableBindings.list[0].value.asnType   =   ASN_NULL;  
                           
                          SnmpUtilOidFree(&tempOid);  
                           
                  }   //   end   while()  
                   
                   
                  //   Free   the   variable   bindings   that   have   been   allocated.  
                   
                  SnmpUtilVarBindListFree(&variableBindings);  
                   
                  SnmpUtilOidFree(&root);  
                   
                   
          }  
          else   if   (operation   ==   TRAP)  
          {  
                  //   Trap   handling   can   be   done   two   different   ways:   event   driven   or  
                  //   polled.     The   following   code   illustrates   the   steps   to   use   event  
                  //   driven   trap   reception   in   a   management   application.  
                   
                   
                  HANDLE   hNewTraps   =   NULL;  
                   
                   
                  if   (!SnmpMgrTrapListen(&hNewTraps))  
                  {  
                          printf("error   on   SnmpMgrTrapListen   %d\n",   GetLastError());  
                  }  
                  else  
                  {  
                          printf("snmputil:   listening   for   traps...\n");  
                  }  
                   
  Top

2 楼languagec(各有所求)回复于 2006-03-03 18:54:12 得分 0

 
                  while(1)  
                  {  
                          DWORD   dwResult;  
                           
                          if   ((dwResult   =   WaitForSingleObject(hNewTraps,   0xffffffff))  
                                  ==   0xffffffff)  
                          {  
                                  printf("error   on   WaitForSingleObject   %d\n",  
                                          GetLastError());  
                          }  
                          else   if   (!ResetEvent(hNewTraps))  
                          {  
                                  printf("error   on   ResetEvent   %d\n",   GetLastError());  
                          }  
                          else  
                          {  
                                  AsnObjectIdentifier   enterprise;  
                                  AsnNetworkAddress       IPAddress;  
                                  AsnInteger                     genericTrap;  
                                  AsnInteger                     specificTrap;  
                                  AsnTimeticks                 timeStamp;  
                                  RFC1157VarBindList     variableBindings;  
                                   
                                  UINT   i;  
                                  char   *string   =   NULL;  
                                   
                                  while(SnmpMgrGetTrap(&enterprise,   &IPAddress,   &genericTrap,  
                                          &specificTrap,   &timeStamp,   &variableBindings))  
                                  {  
                                          printf("snmputil:   trap   generic=%d   specific=%d\n",  
                                                  genericTrap,   specificTrap);  
                                          if   (IPAddress.length   ==   4)   {  
                                                  printf("     from   ->   %d.%d.%d.%d\n",  
                                                          (int)IPAddress.stream[0],   (int)IPAddress.stream[1],  
                                                          (int)IPAddress.stream[2],   (int)IPAddress.stream[3]);  
                                                   
                                          }  
                                          if   (IPAddress.dynamic)   {  
                                                  SNMP_free(IPAddress.stream);  
                                          }  
                                           
                                          for(i=0;   i   <   variableBindings.len;   i++)  
                                          {  
                                                  SnmpMgrOidToStr(&variableBindings.list[i].name,   &string);  
                                                  printf("Variable   =   %s\n",   string);  
                                                  if   (string)   SNMP_free(string);  
                                                   
                                                  printf("Value         =   ");  
                                                  SnmpUtilPrintAsnAny(&variableBindings.list[i].value);  
                                          }   //   end   for()  
                                          printf("\n");  
                                           
                                           
                                          SnmpUtilOidFree(&enterprise);  
                                           
                                          SnmpUtilVarBindListFree(&variableBindings);  
                                  }  
                          }  
                  }   //   end   while()  
                   
                   
          }   //   end   if(operation)  
           
           
          if   (operation   !=   TRAP)  
          {  
                  //   Close   SNMP   session   with   the   remote   agent.  
                   
                  if   (!SnmpMgrClose(session))  
                  {  
                          printf("error   on   SnmpMgrClose   %d\n",   GetLastError());  
                           
                          return   1;  
                  }  
          }  
           
           
          //   Let   the   command   interpreter   know   things   went   ok.  
           
          return   0;  
           
           
  }   //   end   main()  
   
  以下是MAKEFILE文件  
   
  #   Nmake   macros   for   building   Windows   32-Bit   apps  
   
  TARGETOS=WINNT  
   
  !include   <ntwin32.mak>  
   
  !if   "$(CPU)"   ==   "i386"  
  cflags   =   $(cflags)   -D_CRTAPI1=_cdecl   -D_CRTAPI2=_cdecl  
  !else  
  cflags   =   $(cflags)   -D_CRTAPI1=   -D_CRTAPI2=  
  !endif  
   
  all:   snmputil.exe  
   
  snmputil.obj:   snmputil.c  
          $(cc)   $(cflags)   $(cvars)   $(cdebug)   snmputil.c  
   
  snmputil.exe:   snmputil.obj  
          $(link)   $(linkdebug)   $(conflags)   -out:snmputil.exe   snmputil.obj   $(conlibsdll)   \  
          advapi32.lib   snmpapi.lib   mgmtapi.lib  
     
  如果开始有链接错误,那么八成是因为需要加入mgmtapi.lib   snmpapi.lib   这两个库文件到链接选项里。  
   
  运行这个程序生成snmputil.exe  
   
  2.3   运行  
  在命令模式下输入   snmputil   get   你的IP地址或者用户名   public   .1.3.6.1.2.1.1.1.0  
   
  是不是看到了你机器地相关信息。如果是网络上地其他机器,如果安装了SNMP,也可以看到他的信息。至于为什么什么用,就请您再接再厉地学习了。  
   
  以上内容为二手转帖;  
  我编译时遇到两个错误,我对编译器的使用不熟悉,希望得到各位大哥的指点。  
  如果我想学习使用编译器,应该看什么书。   我不熟悉编译多个文件,也不知道   MAKEFILE   文件的作用和如何使用。  
  编译错误信息如下:  
  inking...  
  LIBCD.lib(wincrt0.obj)   :   error   LNK2001:   unresolved   external   symbol   _WinMain@16  
  Debug/t.exe   :   fatal   error   LNK1120:   1   unresolved   externals  
  Error   executing   link.exe.  
   
  t.exe   -   2   error(s),   0   warning(s)  
  Top

3 楼languagec(各有所求)回复于 2006-03-03 18:55:52 得分 0

由于帖子内容较长,从后往前看可能比较好  
  Top

4 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-03-04 09:50:40 得分 100

明显是目标平台错了,用基于Windows的程序的配置编译控制台程序  
  http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B131204Top

相关问题

  • VC编译问题
  • vc++编译问题???
  • VC 编译问题!!
  • vc编译错误
  • vc不能编译
  • 编译问题!VC
  • vc编译 程序
  • VC++编译问题
  • VC编译问题
  • VC编译问题??????

关键词

  • 编译
  • snmp
  • 文件
  • 代码
  • nt
  • management
  • 信息
  • variablebindings
  • snmputil
  • errorindex

得分解答快速导航

  • 帖主:languagec
  • jiangsheng

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo