报错错误的行我加注释了?
大家帮我改改,特别是看过这段代码的
资源文件也省略了
程式21-3  STRLI
STRLIB.H
/*----------------------------------------------------------------------------
    STRLIB.H header file
-----------------------------------------------------------------------------*/#ifdef __cplusplus
#define EXPORT extern "C" __declspec (dllexport)
#else
#define EXPORT __declspec (dllexport)
#endif      // The maximum number of strings STRLIB will store and their lengths
#define  MAX_STRINGS 256
#define  MAX_LENGTH  63      // The callback function type definition uses generic stringstypedef BOOL (CALLBACK * GETSTRCB) (PCTSTR, PVOID) ;//这行有错误      // Each function has ANSI and Unicode versionsEXPORT  BOOL CALLBACK AddStringA (PCSTR) ;
EXPORT  BOOL CALLBACK AddStringW (PCWSTR) ;EXPORT  BOOL CALLBACK DeleteStringA (PCSTR) ;
EXPORT  BOOL CALLBACK DeleteStringW (PCWSTR) ;EXPORT  int CALLBACK GetStringsA (GETSTRCB, PVOID) ;
EXPORT  int CALLBACK GetStringsW (GETSTRCB, PVOID) ;
 
      // Use the correct version depending on the UNICODE identifier#ifdef  UNICODE
#define  AddString     AddStringW
#define  DeleteString  DeleteStringW
#define  GetStrings    GetStringsW
#else
#define  AddString     AddStringA
#define  DeleteString  DeleteStringA
#define  GetStrings    GetStringsA
#endif
STRLIB.C
/*---------------------------------------------------------------------------
    STRLIB.C -  Library module for STRPROG program
                (c) Charles Petzold, 1998
----------------------------------------------------------------------------*/#include <windows.h>
#include <wchar.h>        // for wide-character string functions
#include "strlib.h" // shared memory section (requires /SECTION:shared,RWS in link options)
#pragma  data_seg ("shared")
int    iTotal = 0 ;
WCHAR  szStrings [MAX_STRINGS][MAX_LENGTH + 1] = { '\0' } ;
#pragma  data_seg ()#pragma  comment(linker,"/SECTION:shared,RWS")int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
return TRUE ;
}EXPORT BOOL CALLBACK AddStringA (PCSTR pStringIn)
{
      BOOL   bReturn ;
      int    iLength ;
      PWSTR  pWideStr ; // Convert string to Unicode and call AddStringW
      iLength = MultiByteToWideChar (CP_ACP, 0, pStringIn, -1, NULL, 0) ;
      pWideStr = malloc (iLength) ;//这行有错误
      MultiByteToWideChar (CP_ACP, 0, pStringIn, -1, pWideStr, iLength) ;
      bReturn = AddStringW (pWideStr) ;
      free (pWideStr) ;      return bReturn ;
}EXPORT BOOL CALLBACK AddStringW (PCWSTR pStringIn)
{
      PWSTR  pString ;
      int    i, iLength ;
     
      if (iTotal == MAX_STRINGS - 1)
           return FALSE ;
      if ((iLength = wcslen (pStringIn)) == 0)
           return FALSE ;
           // Allocate memory for storing string, copy it, convert to uppercase
      pString = malloc (sizeof (WCHAR) * (1 + iLength)) ;这行有错误
      wcscpy (pString, pStringIn) ;
      _wcsupr (pString) ;           //  Alphabetize the strings
      for (i = iTotal ; i > 0 ; i-)//这行有错误
      {
           if (wcscmp (pString, szStrings[i - 1]) >= 0)
                break ;
           wcscpy (szStrings[i], szStrings[i - 1]) ;
      }
      wcscpy (szStrings[i], pString) ;
      iTotal++ ;      free (pString) ;
      return TRUE ;
}EXPORT BOOL CALLBACK DeleteStringA (PCSTR pStringIn)
{
      BOOL   bReturn ;
      int    iLength ;
      PWSTR  pWideStr ;           // Convert string to Unicode and call DeleteStringW      iLength = MultiByteToWideChar (CP_ACP, 0, pStringIn, -1, NULL, 0) ;
      pWideStr = malloc (iLength) ;//这行有错误
      MultiByteToWideChar (CP_ACP, 0, pStringIn, -1, pWideStr, iLength) ;
      bReturn = DeleteStringW (pWideStr) ;
      free (pWideStr) ;      return bReturn ;
}EXPORT BOOL CALLBACK DeleteStringW (PCWSTR pStringIn)
{
      int i, j ;
      if (0 == wcslen (pStringIn))
           return FALSE ;
      for (i = 0 ; i < iTotal ; i++)
   {
           if (_wcsicmp (szStrings[i], pStringIn) == 0)
                break ;
    }
           // If given string not in list, return without taking action
      if (i == iTotal)
           return FALSE ;
           // Else adjust list downward
      for (j = i ; j < iTotal ; j++)
           wcscpy (szStrings[j], szStrings[j + 1]) ;
      szStrings[iTotal-][0] = '\0' ;
      return TRUE ;
}EXPORT int CALLBACK GetStringsA (GETSTRCB pfnGetStrCallBack, PVOID pParam)
{
      BOOL  bReturn ;
      int   i, iLength ;
      PSTR  pAnsiStr ; for (i = 0 ; i < iTotal ; i++)
      {
                // Convert string from Unicode
iLength = WideCharToMultiByte ( CP_ACP, 0, szStrings[i], -1, NULL, 0, NULL, NULL) ;
pAnsiStr = malloc (iLength) ;//这行有错误
          WideCharToMultiByte ( CP_ACP, 0, szStrings[i], -1, pAnsiStr, iLength, NULL, NULL) ;                // Call callback function bReturn = pfnGetStrCallBack (pAnsiStr, pParam) ;//这行有错误
          
if (bReturn == FALSE)
                return i + 1 ; free (pAnsiStr) ;
      }
      return iTotal ;
}EXPORT int CALLBACK GetStringsW (GETSTRCB pfnGetStrCallBack, PVOID pParam)
{
      BOOL  bReturn ;
      int   i ;
     
      for (i = 0 ; i < iTotal ; i++)
      {
           bReturn = pfnGetStrCallBack (szStrings[i], pParam) ;//这行有错误
           if (bReturn == FALSE)
                return i + 1 ;
      }
      return iTotal ;
}
--------------------------------
 程式21-4  STRPROG
STRPROG.C
这里代码没有错误,省略了
出的错误如下
-------------------Configuration: STRLIB - Win32 Debug--------------------
Compiling...
STRLIB.CPP
c:\program files\microsoft visual studio\myprojects\strprog\strlib.h(17) : error C2065: 'PCTSTR' : undeclared identifier
c:\program files\microsoft visual studio\myprojects\strprog\strlib.h(17) : error C2275: 'PVOID' : illegal use of this type as an expression
        c:\program files\microsoft visual studio\vc98\include\winnt.h(106) : see declaration of 'PVOID'
c:\program files\microsoft visual studio\myprojects\strprog\strlib.h(17) : error C2165: 'left-side modifier' : cannot modify pointers to data
c:\program files\microsoft visual studio\myprojects\strprog\strlib.h(17) : error C2071: 'GETSTRCB' : illegal storage class
c:\program files\microsoft visual studio\myprojects\strprog\strlib.cpp(31) : error C2440: '=' : cannot convert from 'void *' to 'unsigned short *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast
c:\program files\microsoft visual studio\myprojects\strprog\strlib.cpp(49) : error C2440: '=' : cannot convert from 'void *' to 'unsigned short *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast
c:\program files\microsoft visual studio\myprojects\strprog\strlib.cpp(76) : error C2440: '=' : cannot convert from 'void *' to 'unsigned short *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast
c:\program files\microsoft visual studio\myprojects\strprog\strlib.cpp(114) : error C2440: '=' : cannot convert from 'void *' to 'char *'
        Conversion from 'void*' to pointer to non-'void' requires an explicit cast
c:\program files\microsoft visual studio\myprojects\strprog\strlib.cpp(119) : error C2064: term does not evaluate to a function
c:\program files\microsoft visual studio\myprojects\strprog\strlib.cpp(136) : error C2064: term does not evaluate to a function
Error executing cl.exe.STRPROG.exe - 10 error(s), 0 warning(s)