Камрады, а не у кого не завалялось visual studio с 2003? А то чтото проект из 2003 в 2005 не компиляется. И вообще фигня какая то
MessageBox(NULL, "Текст", "Заголовок", 4 | 10);
пишет
#include "stdafx.h"
#include <windows.h>
#define quantity_bulbs 30
#define colors 3
#define table_volumes_lage (quantity_bulbs * colors)
#define bit_1 0xE0
#define bit_0 0xFC
#define sinxrodata 0xFF
#define sinxroframes 1
#define large_comand_message ( quantity_bulbs * colors * 8 + sinxroframes )
#define end_large_comand_message (large_comand_message-1)
#define RED_color 2
#define GREEN_color 1
#define BLUE_color 0
typedef struct _OVERLAP {
ULONG_PTR volumes_Internal;
ULONG_PTR volumes_InternalHigh;
DWORD volumes_Offset;
DWORD volumes_OffsetHigh;
HANDLE volumes_hEvent;
} volumes_OVERLAP;
DWORD WINAPI vrite_port(PVOID );
DWORD WINAPI effects(PVOID );
unsigned char gloobaal = 0; //длинна отладки
unsigned char comand_message[ large_comand_message ]; //посылка в порт
unsigned char table_volumes[ table_volumes_lage ];
HANDLE Eventes;
HANDLE Thread_PORTS_is_started;
HANDLE Thread_effects_is_started;
//---------------- Головной поток ----------------
int _tmain(int argc, _TCHAR* argv[]){
DWORD wsize;
DWORD tsteventes;
int x = 0;
printf("_tmain are started with a priority %d\n\r", GetPriorityClass( GetCurrentProcess() ) );
//семафоры событий
Eventes = CreateEvent(NULL, FALSE, FALSE, NULL);
Thread_PORTS_is_started = CreateEvent(NULL, TRUE, FALSE, NULL);
Thread_effects_is_started = CreateEvent(NULL, TRUE, FALSE, NULL);
//***** создать первый поток *****
HANDLE EFFECTS = CreateThread( NULL, 0, effects, (PVOID) &x, 0, &tsteventes); //работайем
tsteventes = WaitForSingleObject( Eventes, 5000 );
if ( 0 != tsteventes ){
// TerminateThread (PORTS,tsteventes);
TerminateThread (EFFECTS,tsteventes);
// CloseHandle( PORTS );
CloseHandle( EFFECTS );
MessageBox( NULL, "Ошибка запуска потока"," EFFECTS Error", MB_OK );
ExitProcess(1);
}
//}else if ( WAIT_OBJECT_0 == tsteventes ){}
//***** создать второй поток *****
//SetPriorityClass( GetCurrentProcess(), NORMAL_PRIORITY_CLASS );
//HANDLE PORTS = CreateThread( NULL, 0, vrite_port, (PVOID) &x, CREATE_SUSPENDED, &tsteventes); //сначала спящим
//SetThreadPriority( PORTS, THREAD_PRIORITY_ABOVE_NORMAL );
//ResumeThread( PORTS ); //можэм нАчать!
HANDLE PORTS = CreateThread( NULL, 0, vrite_port, (PVOID) &x, 0, &tsteventes); //работаем
tsteventes = WaitForSingleObject( Eventes, 5000 );
if ( WAIT_OBJECT_0 != tsteventes ){
TerminateThread (PORTS,tsteventes);
TerminateThread (EFFECTS,tsteventes);
CloseHandle( PORTS );
CloseHandle( EFFECTS );
MessageBox(NULL, "Ошибка запуска потока"," PORTS Error", MB_OK);
ExitProcess(1);
}
//запускаем патоки на выполнение
SetThreadPriority( EFFECTS, THREAD_PRIORITY_ABOVE_NORMAL );
ResumeThread( EFFECTS ); //можэм нАчать!
SetThreadPriority( PORTS, THREAD_PRIORITY_TIME_CRITICAL );
ResumeThread( PORTS ); //можэм нАчать!
//***** главный цикл основного процесса *****
while(1){
//SetTimer()
Sleep(100);
MessageBox(NULL, "Надоело?","И чо?", MB_OK);
CloseHandle( EFFECTS );
CloseHandle( PORTS );
ExitProcess(0);
//SetFilePointer(volumes_bin, 0, 0, FILE_BEGIN);
//WriteFile( volumes_bin, &comand_message, large_comand_message, &wsize, NULL ); //по задержке похоже работает//volumes[ j + i ] =0xE0;
}
CloseHandle( EFFECTS );
CloseHandle( PORTS );
return 0;
}
//---------------------------------------- первый поток ----------------------------------------
DWORD WINAPI effects(PVOID pvParam) {
DWORD wsize;
HANDLE volumes_bin; //
printf("EFFECTS are started with a relative priority %d\n\r", GetPriorityClass( GetCurrentThread() ) );
//создать файл с данными передаваемыми в порт, для отладки.
volumes_bin = CreateFile("volumes.bin", GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_ALWAYS, 0, NULL);
if (volumes_bin == INVALID_HANDLE_VALUE){
printf( "Thread EFFECTS error, volumes.bin is NOT created\n\r");
SetEvent( Eventes );
ResetEvent( Thread_effects_is_started );
//MessageBox(NULL, "ниасилил создать файл","Error", MB_OK);
ExitThread(1);
}
printf( "volumes.bin is created\n\r");
SetEvent( Eventes );
SetEvent( Thread_effects_is_started );
SuspendThread( GetCurrentThread() );
//SetThreadPriority( GetCurrentThread(), THREAD_PRIORITY_IDLE );//ждать запуска
printf("Thread EFFECTS are restarted with a relative priority %d\n\r",GetThreadPriority( GetCurrentThread() ));
while(1) {
Sleep(50);
table_volumes[RED_color]++;
table_volumes[GREEN_color]--;
table_volumes[BLUE_color] = table_volumes[GREEN_color]/2;
gloobaal++;
SetFilePointer(volumes_bin, 0, 0, FILE_BEGIN);
WriteFile( volumes_bin, &table_volumes, table_volumes_lage, &wsize, NULL ); //по задержке похоже работайет//volumes[ j + i ] =0xE0;
}
}
//---------------------------------------- второй поток ----------------------------------------
DWORD WINAPI vrite_port(PVOID pvParam) {
HANDLE Port;
DWORD wsize;
printf("Thread PORTS_INI_SECTION are started with a relative priority %d\n\r",GetThreadPriority( GetCurrentThread() ));
//открываим компорт
Port = CreateFile("\\\\.\\COM6", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL);
if (Port == INVALID_HANDLE_VALUE) {
printf( "Thread PORTS, error open port\n\r" );
SetEvent( Eventes );
ExitThread(1);
}
//настраиваем компорт
DCB ComDCM;
memset(&ComDCM,0,sizeof(ComDCM));
ComDCM.DCBlength = sizeof(DCB);
GetCommState(Port, &ComDCM);
ComDCM.BaudRate = DWORD(57600);
ComDCM.ByteSize = 8;
ComDCM.Parity = NOPARITY;
ComDCM.StopBits = ONESTOPBIT;
ComDCM.fAbortOnError = TRUE;
ComDCM.fDtrControl = DTR_CONTROL_DISABLE;
ComDCM.fRtsControl = RTS_CONTROL_DISABLE;
ComDCM.fBinary = TRUE;
ComDCM.fParity = FALSE;
ComDCM.fInX = ComDCM.fOutX = FALSE;
ComDCM.XonChar = 0;
//ComDCM.XoffChar = uint8_t(0xff);
ComDCM.fErrorChar = FALSE;
ComDCM.fNull = FALSE;
ComDCM.fOutxCtsFlow = FALSE;
ComDCM.fOutxDsrFlow = FALSE;
ComDCM.XonLim = 128;
ComDCM.XoffLim = 128;
if( ! SetCommState( Port, &ComDCM ) ) {
CloseHandle(Port);
printf( "Thread PORTS, post_ini port error \n\r" );
SetEvent( Eventes );
ExitThread(1);
}
//надоже, получилось!
printf("COMPort works on speed %d\n\r",ComDCM.BaudRate);
SetEvent( Eventes );
SetEvent( Thread_PORTS_is_started );
SuspendThread( GetCurrentThread() );
//SetThreadPriority( GetCurrentThread(), THREAD_PRIORITY_IDLE );//ждать запуска
printf("Thread PORTS are restarted with a relative priority %d\n\r",GetThreadPriority( GetCurrentThread() ));
//--- передача соопстно ---
while(1){
//перекодировать байты в код для гирлянды
unsigned char datas;
for(unsigned int j=0; j < quantity_bulbs * colors; j++ ) {
datas = table_volumes[ j ];
for(unsigned char bitvise =0x80, unsigned int i=0; i<8 ;i++, bitvise = (bitvise >> 1) ){
if (datas & bitvise){ /*перекодировать биты в байты*/
comand_message[ i + j * 8 ] = bit_1;
}else{
comand_message[ i + j * 8 ] = bit_0;
}
}
}
comand_message[ end_large_comand_message ] = sinxrodata;
WriteFile( Port, &comand_message, ( large_comand_message ), &wsize, 0 ); //по задержке похоже работает
printf( "%d \r",gloobaal); //отладка
}return(0);
}
error C3861: 'MessageBox': identifier not foundИ HANDLE не понимает и DWORD не понимает. Может из за того что версия экспрес, или в хидерах что то забыл? Вот то что компилялось в 2003(ну потерял Я её)
-
- на торрентах есть - koyodza(12.06.2011 11:45, ссылка)
- Если у Вас Express, то нужно дополнительно скачать и установить MS platform SDK, чтобы API работали. - Xитpый Kитaeц(12.06.2011 09:23)