报错错误的行我加注释了?
大家帮我改改,特别是看过这段代码的
资源文件也省略了
程式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)
大家帮我改改,特别是看过这段代码的
资源文件也省略了
程式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)
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货