I have below class
class Cdata12Mnt
{
public:
char IOBname[ID1_IOB_PIOTSUP-ID1_IOB_TOP][BOADNAM_MAX + 4];
char ExIOBname[ID1_MAX_INF-ID1_EXIOB_U1TOP][BOADNAM_MAX + 4];
char cflpath[256];
char basetext[256];
UINT database[ID1_MAX_INF];
int State;
public:
char SelectPath[256];
public:
int GetIOBName(int slt,char *Name);
Cdata12Mnt(char *SelectPath);
virtual ~Cdata12Mnt();
int GetValue(int id);
int GetState() { return State; }
};
And I have function as below
Cdata12Mnt::Cdata12Mnt(char *SelectPath)
{
SCTReg reg;
char buf[256], *cpnt, *npnt, *bpnt1, *bpnt2;
char *startcode[] = {"CNTL_CODE ","SEGMENT "};
char *stopcode = {"END_CNTL_CODE "};
FILE *fp;
int ii, infl;
State = 0;
for (ii = 0; ii < (ID1_IOB_PIOTSUP - ID1_IOB_TOP); ii++) {
strcpy(IOBname[ii], "");
}
for (ii = 0; ii < (ID1_MAX_INF-ID1_EXIOB_U1TOP); ii++) {
**strcpy(ExIOBname[ii], "");**
}
sprintf(cflpath, "%s\%s", SelectPath, CDATAFL);
if ((fp = fopen(cflpath,"r"))!=NULL) {
for (ii = 0, infl = 0; fgets(buf, 256, fp) != NULL;) {
if (infl == 0 && strncmp(buf, startcode[0], strlen(startcode[0])) == 0) {
if ((cpnt = strchr(&buf[strlen(startcode[0])],*startcode[1])) != NULL) {
if (strncmp(cpnt,startcode[1], strlen(startcode[1])) == 0) {
infl = 1;
continue;
}
}
}
if (infl == 0) {
continue;
}
if (strncmp(buf,stopcode,strlen(stopcode))==0) {
if (ii == ID1_EXIOB_U1TOP) {
for (int nDataNumber = ii; nDataNumber < ID1_MAX_INF; nDataNumber++) {
database[nDataNumber] = 0;
}
}
infl = 0;
continue;
}
if (strncmp(&buf[14], " DD ", 4) == 0) {
if ((cpnt=strchr(buf, ';')) != NULL) {
*cpnt = '';
}
if (ii >= ID1_IOB_TOP && ii < ID1_IOB_PIOTSUP) {
if ((bpnt1 = strchr(cpnt + 1,'(')) != NULL && (bpnt2=strchr(cpnt + 1,')'))!=NULL && bpnt1 < bpnt2) {
*bpnt2 = '';
*(bpnt1 + BOADNAM_MAX + 1) = '';
strcpy(IOBname[ii-ID1_IOB_TOP], bpnt1 + 1);
}
}
if (ii >= ID1_EXIOB_U1TOP && ii < ID1_MAX_INF) {
if ((bpnt1 = strchr(cpnt + 1, '(')) != NULL && (bpnt2=strchr(cpnt+1,')'))!=NULL && bpnt1 < bpnt2) {
*bpnt2='';
*(bpnt1+BOADNAM_MAX+1)='';
strcpy(ExIOBname[ii-ID1_EXIOB_U1TOP], bpnt1 + 1);
}
}
for (cpnt = &buf[18]; cpnt != NULL;) {
if ((npnt=strchr(cpnt, ',')) != NULL)
*npnt='';
}
if (strchr(cpnt,'H')!=NULL) {
sscanf(cpnt,"%XH",&database[ii]);
} else {
database[ii]=atoi(cpnt);
}
ii++;
cpnt = npnt;
if (cpnt != NULL) {
cpnt++;
}
}
}
}
fclose(fp);
} else {
State=-1;
}
When I compile this function in Visual studio 2008, it gives me error at strcpy(IOBname[ii],"");
as below
error C2220: warning treated as error — no ‘object’ file generated
How to fix this error?
Asked
8 years, 2 months ago
Viewed
8k times
I am Trying to develop a sample driver with the code:
#include <ntddk.h>
#include<wdm.h>
DRIVER_INITIALIZE DriverEntry;
NTSTATUS DriverEntry(__inout PDRIVER_OBJECT DriverObject,__in PUNICODE_STRING RegistryPath)
{
NTSTATUS status;
DbgPrint("Driver has been loaded");
return(STATUS_SUCCESS);
}
But it is showing me an error of
"error C2220: warning treated as error - no 'object' file generated"
please Help Me!!
Thanks
SSpoke
5,63010 gold badges71 silver badges122 bronze badges
asked Apr 6, 2015 at 11:41
9
- remove DRIVER_INITIALIZE DriverEntry; Line
- Unreference registerObject using UNREFERENCED_PARAMETER
- register filter using FltRegisterFilter See the definition on msdn
- Use RtlInitUnicodeString
- DbgPrint(«Driver Entry !!!!!»);
The Process should be followed May be this is giving you error because of UNREFERENCED_PARAMETER has not been used.
answered May 6, 2015 at 12:35
0
У меня есть ниже класс:
class Cdata12Mnt
{
public:
char IOBname[ID1_IOB_PIOTSUP-ID1_IOB_TOP][BOADNAM_MAX + 4];
char ExIOBname[ID1_MAX_INF-ID1_EXIOB_U1TOP][BOADNAM_MAX + 4];
char cflpath[256];
char basetext[256];
UINT database[ID1_MAX_INF];
int State;
public:
char SelectPath[256];
public:
int GetIOBName(int slt,char *Name);
Cdata12Mnt(char *SelectPath);
virtual ~Cdata12Mnt();
int GetValue(int id);
int GetState() { return State; }
};
И у меня есть функция как ниже:
Cdata12Mnt::Cdata12Mnt(char *SelectPath)
{
SCTReg reg;
char buf[256], *cpnt, *npnt, *bpnt1, *bpnt2;
char *startcode[] = {"CNTL_CODE ","SEGMENT "};
char *stopcode = {"END_CNTL_CODE "};
FILE *fp;
int ii, infl;
State = 0;
for (ii = 0; ii < (ID1_IOB_PIOTSUP - ID1_IOB_TOP); ii++) {
strcpy(IOBname[ii], "");
}
for (ii = 0; ii < (ID1_MAX_INF-ID1_EXIOB_U1TOP); ii++) {
**strcpy(ExIOBname[ii], "");**
}
sprintf(cflpath, "%s\%s", SelectPath, CDATAFL);
if ((fp = fopen(cflpath,"r"))!=NULL) {
for (ii = 0, infl = 0; fgets(buf, 256, fp) != NULL;) {
if (infl == 0 && strncmp(buf, startcode[0], strlen(startcode[0])) == 0) {
if ((cpnt = strchr(&buf[strlen(startcode[0])],*startcode[1])) != NULL) {
if (strncmp(cpnt,startcode[1], strlen(startcode[1])) == 0) {
infl = 1;
continue;
}
}
}
if (infl == 0) {
continue;
}
if (strncmp(buf,stopcode,strlen(stopcode))==0) {
if (ii == ID1_EXIOB_U1TOP) {
for (int nDataNumber = ii; nDataNumber < ID1_MAX_INF; nDataNumber++) {
database[nDataNumber] = 0;
}
}
infl = 0;
continue;
}
if (strncmp(&buf[14], " DD ", 4) == 0) {
if ((cpnt=strchr(buf, ';')) != NULL) {
*cpnt = '';
}
if (ii >= ID1_IOB_TOP && ii < ID1_IOB_PIOTSUP) {
if ((bpnt1 = strchr(cpnt + 1,'(')) != NULL && (bpnt2=strchr(cpnt + 1,')'))!=NULL && bpnt1 < bpnt2) {
*bpnt2 = '';
*(bpnt1 + BOADNAM_MAX + 1) = '';
strcpy(IOBname[ii-ID1_IOB_TOP], bpnt1 + 1);
}
}
if (ii >= ID1_EXIOB_U1TOP && ii < ID1_MAX_INF) {
if ((bpnt1 = strchr(cpnt + 1, '(')) != NULL && (bpnt2=strchr(cpnt+1,')'))!=NULL && bpnt1 < bpnt2) {
*bpnt2='';
*(bpnt1+BOADNAM_MAX+1)='';
strcpy(ExIOBname[ii-ID1_EXIOB_U1TOP], bpnt1 + 1);
}
}
for (cpnt = &buf[18]; cpnt != NULL;) {
if ((npnt=strchr(cpnt, ',')) != NULL)
*npnt='';
}
if (strchr(cpnt,'H')!=NULL) {
sscanf(cpnt,"%XH",&database[ii]);
} else {
database[ii]=atoi(cpnt);
}
ii++;
cpnt = npnt;
if (cpnt != NULL) {
cpnt++;
}
}
}
}
fclose(fp);
} else {
State=-1;
}
Когда я компилирую эту функцию в Visual Studio 2008, она выдает ошибку при strcpy(IOBname[ii],"");
как ниже.
ошибка C2220: предупреждение рассматривается как ошибка — файл объекта не создан
Как исправить эту ошибку?
21
Решение
Ошибка говорит о том, что предупреждение было обработано как ошибка. Поэтому ваша проблема — предупреждающее сообщение! Проверьте их и исправьте их.
Если вы не знаете, как их найти: откройте Error List
(View
> Error List
) и нажмите на Warning
,
23
Другие решения
Идти к project properties -> configurations properties -> C/C++ -> treats warning as error -> No (/WX-)
,
10
Это сообщение об ошибке очень запутанно. Я просто исправил другие «предупреждения» в своем проекте, и у меня действительно было только одно (простое):
предупреждение C4101: ‘i’: локальная переменная без ссылки
После того, как я прокомментировал это неиспользованным i
и скомпилировал его, другая ошибка исчезла.
5
Как примечание, вы можете включить / отключить отдельные предупреждения, используя #pragma
, Вы можете взглянуть на документацию Вот
Из документации:
// pragma_warning.cpp
// compile with: /W1
#pragma warning(disable:4700)
void Test() {
int x;
int y = x; // no C4700 here
#pragma warning(default:4700) // C4700 enabled after Test ends
}
int main() {
int x;
int y = x; // C4700
}
3
Это предупреждение о небезопасном использовании strcpy. Пытаться IOBname[ii]='';
вместо.
1
|
|
|
error: предупреждение обработано как ошибка — файл «object» не создан
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Full Member Рейтинг (т): 2 |
переношу код с проекта в проект вилазит такая ошибка
wchar_t ch0, ch1, ch2; ch0 = _tcstol( strEncodedText.Mid( i+1, 2 ), NULL, 16 ); <<<< ерор Сообщение отредактировано: NOCaut — 12.09.11, 13:20 |
like-nix |
|
Senior Member Рейтинг (т): 27 |
_tcstol,эта функция кажется в лонг конвертит судя по названию, к файлам наверное отношения не имеет. Цитата NOCaut @ 12.09.11, 13:14 strEncodedText Это что за объект? |
NOCaut |
|
Full Member Рейтинг (т): 2 |
Cstring strEncodedText; Но на другом моем проекте она ж работает Добавлено 12.09.11, 13:30 |
like-nix |
|
Senior Member Рейтинг (т): 27 |
NOCaut, напиши полный текст отчета компилятора об ошибке. |
NOCaut |
|
Full Member Рейтинг (т): 2 |
1>—— Построение начато: проект: WebCtrl, Конфигурация: Release UNICODE Win32 —— 1>Компиляция… 1>CntrEvnt2.cpp 1>.CntrEvnt2.cpp(28) : error C2220: предупреждение обработано как ошибка — файл «object» не создан 1>.CntrEvnt2.cpp(28) : warning C4244: =: преобразование ‘long’ в ‘wchar_t’, возможна потеря данных Сообщение отредактировано: NOCaut — 12.09.11, 13:33 |
like-nix |
|
Senior Member Рейтинг (т): 27 |
Возможно _tcstol не может сконвертить CSring во что-то не зная сигнатуры _tcstol трудно сказать во что. Добавлено 12.09.11, 13:36 |
maxim84_ |
|
Цитата Возможно _tcstol не может сконвертить CSring во что-то не зная сигнатуры _tcstol трудно сказать во что. _tcstol |
NOCaut |
|
Full Member Рейтинг (т): 2 |
щас проверим Добавлено 12.09.11, 13:38 Добавлено 12.09.11, 13:39
_tcstol( strEncodedText.Mid( i+1, 2 ), NULL, 16 ); так компилится Добавлено 12.09.11, 13:41 |
like-nix |
|
Senior Member Рейтинг (т): 27 |
Ну а если сделать явное приведение? |
maxim84_ |
|
wchar_t* _result = 0; DWORD count = _tcstol( strEncodedText.Mid( i+1, 2 ), &_result, 16 ); Как-то так. |
NOCaut |
|
Full Member Рейтинг (т): 2 |
CString URLDecode( CString strEncodedText ) { CString strResult; wchar_t ch0, ch1, ch2; wchar_t wch; TCHAR tch; int i = 0; while( i<strEncodedText.GetLength() ) { tch = strEncodedText.GetAt(i); if( tch != _T(‘%’) ) { // a character not encoded strResult += tch; i++; } else { // a character encoded !! ch0 = _tcstol( strEncodedText.Mid( i+1, 2 ), NULL, 16 ); i += 3; if( ch0 < 0x80 ) // 1 byte for UTF-8 // 0xxx xxxx wch = ch0; else { if( strEncodedText.GetAt(i)!= _T(‘%’) ) // Error! continue; ch1 = _tcstol( strEncodedText.Mid( i+1, 2 ), NULL, 16 ); i += 3; if( ch0 < 0xe0 ) { // 2 byte for UTF-8 // 110x xxxx 10xx xxxx wch = ((ch0&0x1f)<<6) | (ch1&0x3f); } else { // 3 byte for UTF-8 if( strEncodedText.GetAt(i)!= _T(‘%’) ) // Error! continue; ch2 = _tcstol( strEncodedText.Mid( i+1, 2 ), NULL, 16 ); i += 3; // 1110 xxxx 10xx xxxx 10xx xxxx wch = ((ch0&0x0f)<<12) | ((ch1&0x3f)<<6) | (ch2&0x3f); } } strResult += wch; } } } return strResult; Добавлено 12.09.11, 13:48 |
trainer |
|
Отвечающие здесь — вы хоть сообщение об ошибке читаете? В настройках проекта стоит высокий уровень предупреждений — предупреждения рассматриваются как ошибки, соответственно компиляция не проходит. |
like-nix |
|
Senior Member Рейтинг (т): 27 |
trainer, |
NOCaut |
|
Full Member Рейтинг (т): 2 |
спасибо. а где ети настройки? |
trainer |
|
Нужно либо убрать источник предупреждения — [неявное] преобразование long в wchar_t с возможной потерей значащих разрядов, либо убрать ключик /WX, либо добавить /wd4244, либо с помощью #pragma warning подавить это предупреждение в этом конкретном месте. Сообщение отредактировано: trainer — 12.09.11, 14:00 |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- C/C++: Общие вопросы
- Следующая тема
[ Script execution time: 0,0898 ] [ 16 queries used ] [ Generated: 4.06.23, 01:21 GMT ]
У меня есть класс ниже:
class Cdata12Mnt
{
public:
char IOBname[ID1_IOB_PIOTSUP-ID1_IOB_TOP][BOADNAM_MAX + 4];
char ExIOBname[ID1_MAX_INF-ID1_EXIOB_U1TOP][BOADNAM_MAX + 4];
char cflpath[256];
char basetext[256];
UINT database[ID1_MAX_INF];
int State;
public:
char SelectPath[256];
public:
int GetIOBName(int slt,char *Name);
Cdata12Mnt(char *SelectPath);
virtual ~Cdata12Mnt();
int GetValue(int id);
int GetState() { return State; }
};
И у меня есть функция, как ниже:
Cdata12Mnt::Cdata12Mnt(char *SelectPath)
{
SCTReg reg;
char buf[256], *cpnt, *npnt, *bpnt1, *bpnt2;
char *startcode[] = {"CNTL_CODE ","SEGMENT "};
char *stopcode = {"END_CNTL_CODE "};
FILE *fp;
int ii, infl;
State = 0;
for (ii = 0; ii < (ID1_IOB_PIOTSUP - ID1_IOB_TOP); ii++) {
strcpy(IOBname[ii], "");
}
for (ii = 0; ii < (ID1_MAX_INF-ID1_EXIOB_U1TOP); ii++) {
**strcpy(ExIOBname[ii], "");**
}
sprintf(cflpath, "%s\%s", SelectPath, CDATAFL);
if ((fp = fopen(cflpath,"r"))!=NULL) {
for (ii = 0, infl = 0; fgets(buf, 256, fp) != NULL;) {
if (infl == 0 && strncmp(buf, startcode[0], strlen(startcode[0])) == 0) {
if ((cpnt = strchr(&buf[strlen(startcode[0])],*startcode[1])) != NULL) {
if (strncmp(cpnt,startcode[1], strlen(startcode[1])) == 0) {
infl = 1;
continue;
}
}
}
if (infl == 0) {
continue;
}
if (strncmp(buf,stopcode,strlen(stopcode))==0) {
if (ii == ID1_EXIOB_U1TOP) {
for (int nDataNumber = ii; nDataNumber < ID1_MAX_INF; nDataNumber++) {
database[nDataNumber] = 0;
}
}
infl = 0;
continue;
}
if (strncmp(&buf[14], " DD ", 4) == 0) {
if ((cpnt=strchr(buf, ';')) != NULL) {
*cpnt = '';
}
if (ii >= ID1_IOB_TOP && ii < ID1_IOB_PIOTSUP) {
if ((bpnt1 = strchr(cpnt + 1,'(')) != NULL && (bpnt2=strchr(cpnt + 1,')'))!=NULL && bpnt1 < bpnt2) {
*bpnt2 = '';
*(bpnt1 + BOADNAM_MAX + 1) = '';
strcpy(IOBname[ii-ID1_IOB_TOP], bpnt1 + 1);
}
}
if (ii >= ID1_EXIOB_U1TOP && ii < ID1_MAX_INF) {
if ((bpnt1 = strchr(cpnt + 1, '(')) != NULL && (bpnt2=strchr(cpnt+1,')'))!=NULL && bpnt1 < bpnt2) {
*bpnt2='';
*(bpnt1+BOADNAM_MAX+1)='';
strcpy(ExIOBname[ii-ID1_EXIOB_U1TOP], bpnt1 + 1);
}
}
for (cpnt = &buf[18]; cpnt != NULL;) {
if ((npnt=strchr(cpnt, ',')) != NULL)
*npnt='';
}
if (strchr(cpnt,'H')!=NULL) {
sscanf(cpnt,"%XH",&database[ii]);
} else {
database[ii]=atoi(cpnt);
}
ii++;
cpnt = npnt;
if (cpnt != NULL) {
cpnt++;
}
}
}
}
fclose(fp);
} else {
State=-1;
}
Когда я компилирую эту функцию на Visual studio 2008, она дает мне ошибку в strcpy(IOBname[ii],"");
, как показано ниже.
ошибка C2220: предупреждение обрабатывается как ошибка — нет файла ‘object’
Как исправить эту ошибку?