Типы
От: Prosto kva Украина http://vfpprog2002.narod.ru/
Дата: 06.07.04 11:45
Оценка:
Всем привет.
Есть библиотека для фокса.
библиотека находится в файле ping.c
Понадобилось изменить кое-что.
Дописал код:
HANDLE hEvent;
hEvent = CreateEvent (NULL, TRUE, FALSE, "StopThreadEvent");
Пошли ошибки компиляции:
D:\Vfp8\pingcom\Ping.c(105) : error C2275: 'HANDLE' : illegal use of this type as an expression
D:\Program Files\Microsoft Visual Studio\VC98\INCLUDE\winnt.h(207) : see declaration of 'HANDLE'
D:\Vfp8\pingcom\Ping.c(105) : error C2146: syntax error : missing ';' before identifier 'hEvent'
D:\Vfp8\pingcom\Ping.c(105) : error C2065: 'hEvent' : undeclared identifier
Поменял имя файла на СРР
Компилиреут нормально, но ругается на строку, где я вынимаю передаваемые параметры
_StrCpy( (char FAR *) pszMachineName,_HandToPtr(parm->p[0].val.ev_handle) );

Ругается приблизительно так:
Еrror C2664: '_StrCpy' : cannot convert parameter 2 from 'void *' to 'char
*'
Conversion from 'void*' to pointer to non-'void' requires an
explicit cast

Переменная pszMachineName объявлена как char pszMachineName[255];
Мне бы либо СРР отладить, либо С. Плииииз (
Александр
Prosto Kva
Re: Типы
От: Аноним  
Дата: 06.07.04 11:52
Оценка:
Здравствуйте, Prosto kva, Вы писали:

PK>_StrCpy( (char FAR *) pszMachineName,_HandToPtr(parm->p[0].val.ev_handle) );


Может так?
_StrCpy( (char FAR *) pszMachineName,(char*)(_HandToPtr(parm->p[0].val.ev_handle)) );
Re[2]: Типы
От: Prosto kva Украина http://vfpprog2002.narod.ru/
Дата: 06.07.04 12:06
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>_StrCpy( (char FAR *) pszMachineName,(char*)(_HandToPtr(parm->p[0].val.ev_handle)) );
А>

Спасибо, именно так.
Осталось ещё две строчки. Думал, что ответ распространится и на них, но нет, Не подошёл
icmp_data = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, MAX_PACKET);
recvbuf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,MAX_PACKET);
Ругается так:
D:\Vfp8\pingcom\Ping.cpp(205) : error C2440: '=' : cannot convert from 'void *' to 'char *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
D:\Vfp8\pingcom\Ping.cpp(206) : error C2440: '=' : cannot convert from 'void *' to 'char *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Prosto Kva
Re[3]: Типы
От: Prosto kva Украина http://vfpprog2002.narod.ru/
Дата: 06.07.04 12:12
Оценка: :)
Спасибо.
Странно, но (char*)
помогло и тут. ((( Почему в С это проходило?
Александр
Prosto Kva
Re[4]: Типы
От: Lorenzo_LAMAS  
Дата: 06.07.04 12:14
Оценка:
PK>помогло и тут. ((( Почему в С это проходило?

Потому как в С нет такой классной статической системы типов, как в С++.
Of course, the code must be complete enough to compile and link.
Re[3]: Типы
От: chp Россия  
Дата: 06.07.04 12:15
Оценка:
Здравствуйте, Prosto kva, Вы писали:

PK>icmp_data = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, MAX_PACKET);

PK>recvbuf = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,MAX_PACKET);
PK>Ругается так:
PK>D:\Vfp8\pingcom\Ping.cpp(205) : error C2440: '=' : cannot convert from 'void *' to 'char *'
PK> Conversion from 'void*' to pointer to non-'void' requires an explicit cast
PK>D:\Vfp8\pingcom\Ping.cpp(206) : error C2440: '=' : cannot convert from 'void *' to 'char *'
PK> Conversion from 'void*' to pointer to non-'void' requires an explicit cast
Ругается, потому что HeapAlloc() возвращает указатель типа void*, и его надо явно привести к типу, переменных icmp_data и recvbuf.
Re[4]: Типы
От: Prosto kva Украина http://vfpprog2002.narod.ru/
Дата: 06.07.04 12:21
Оценка:
Извините, думал, что закрыл тему.
Компилируется без ошибок, но неможет прорезолвить
Compiling...
Ping.cpp
Linking...
Creating library Release/VFPPing.lib and object Release/VFPPing.exp
winapims.lib(apimain.obj) : error LNK2001: unresolved external symbol __FoxTable

Это следующие строчки:
FoxTable _FoxTable =
{
(FoxTable FAR *)0, sizeof(myFoxInfo) / sizeof(FoxInfo), myFoxInfo
};
Описание
#include <pro_ext.h>
Александр
Prosto Kva
Re[5]: Типы
От: Анатолий Широков СССР  
Дата: 06.07.04 12:24
Оценка:
А так?

#ifdef __cplusplus
extern "C" {
#endif

FoxTable _FoxTable = {
    (FoxTable  *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};

#ifdef __cplusplus
}
#endif
Re[6]: Типы
От: Prosto kva Украина http://vfpprog2002.narod.ru/
Дата: 06.07.04 12:42
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

Спасибо. Я как раз ещё раз перечитал хелп и нашёл это описание. Хотел отменить вопрос.
Спасибо вам.
АШ>А так?

АШ>
АШ>#ifdef __cplusplus
АШ>extern "C" {
АШ>#endif

АШ>FoxTable _FoxTable = {
АШ>    (FoxTable  *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
АШ>};

АШ>#ifdef __cplusplus
АШ>}
АШ>#endif
АШ>
Prosto Kva
Re[4]: Типы
От: Шахтер Интернет  
Дата: 07.07.04 01:10
Оценка:
Здравствуйте, Prosto kva, Вы писали:

PK>Спасибо.

PK>Странно, но (char*)
PK>помогло и тут. ((( Почему в С это проходило?
PK>Александр

Потому что в C разрешена неявная конверсия void * к любому другому указателю.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.