Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с созданием процесса 
:(
    Опции темы
GOBLIN_TT
Дата 11.4.2008, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 6.6.2007

Репутация: нет
Всего: 2



Всем привет, народ помогите пытаюсь сделать программу для порождения процессов функцией CreateProcess(), но при кампиляции вылезает ошибка:

Код

Linking...
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
Debug/process.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.


Я грешу на то, что нужно подключить какую-то бибоиотеку, неподскажиет какую.?))
вот код программы:

Заранее спасибО!)

Код

#include <Windows.h> 
#include <String.h> 
#include <Stdio.h> 
#include <wtypes.h>
#include "index.h"
#define   Procmax 5

#pragma comment(lib, "comctl32.lib")
#pragma comment(lib, "gdi32.lib")
#pragma comment(lib, "user32.lib")
#pragma comment(lib,"gdiplus.lib")
#pragma comment(lib,"kernel32.lib")

LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM); 

char szWinName[] = "ÌîåÎêíî";  // Èìÿ êëàññà îêíà

char str[255];       // Áóôåð ñòðîêè âûâîäà

int X=0, Y=0;        // Òåêóùèå êîîðäèíàòû ñòðîêè 

int procnum=0;       // Êîëè÷åñòâî àêòèâíûõ ïðîöåññîâ

int maxX, maxY;      // Ðàçìåðû ýêðàíà

HDC     memdc;       // DC âèðòóàëüíîãî îêíà

HBITMAP hbit;        // Ðàñòð - ýòî âèðòóàëüíîå îêíî

HBRUSH  hbrush;      // Äåñêðèïòîð êèñòè

 

PROCESS_INFORMATION pinfo[Procmax]; 

 

int WINAPI WinMain (HINSTANCE hThisInst, 

                    HINSTANCE hPrevInst, 

                    LPSTR lpszArgs, 

                    int nWinMode)

   {

   HWND hwnd; 

   MSG msg; 

   WNDCLASS wcl; 

   HACCEL hAccel;

   // Îïðåäåëèòü êëàññ îêíà

   wcl.hInstance=hThisInst;   // Äåñêðèïòîð ïðèëîæåíèÿ 

   wcl.lpszClassName=szWinName;  // Èìÿ êëàññà îêíà

   wcl.lpfnWndProc=WindowFunc;   // Ôóíêöèÿ îêíà

   wcl.style=0;                  // Ñòèëü ïî óìîë÷àíèþ

   wcl.hIcon=LoadIcon(NULL,IDI_APPLICATION); // Èêîíêà  

   wcl.hCursor=LoadCursor(NULL,IDC_ARROW) ;  // Êóðñîð 

   wcl.lpszMenuName="MYMENU";                // Ìåíþ

   wcl.cbClsExtra=0;             // Áåç äîïîëíèòåëüíîé 

   wcl.cbWndExtra=0;             // èíôîðìàöèè

   // Îïðåäåëèòü çàïîëíåíèå îêíà áåëûì öâåòîì

   wcl.hbrBackground=

                  (HBRUSH)GetStockObject(WHITE_BRUSH);

   if(!RegisterClass(&wcl)) // Çàðåãèñòð. êëàññ îêíà

      return 0;

   // Ñîçäàòü îêíî

   hwnd=CreateWindow(szWinName,          // Èìÿ êëàññà 

                    "Ïîðîæäåíèå íîâûõ ïðîöåññîâ",  

                     WS_OVERLAPPEDWINDOW,// Ñòèëü îêíà 

                     CW_USEDEFAULT,    // Õ-êîîðäèíàòà

                     CW_USEDEFAULT,    // Y-êîîðäèíàòà

                     CW_USEDEFAULT,     // Øèðèíà îêíà

                     CW_USEDEFAULT,     // Âûñîòà îêíà

                     HWND_DESKTOP,  // Íåò ðîäèò. îêíà  

                     NULL,                 // Íåò ìåíþ

                     hThisInst, // Äåñêðèï. ïðèëîæåíèÿ  

                     NULL); // Áåç äîïîëèò. àðãóìåíòîâ 

   // Çàãðóçèòü àêñåëåðàòîðû

   hAccel=LoadAccelerators(hThisInst,"MYMENU");

   ShowWindow(hwnd,nWinMode) ; // Ïîêàçàòü îêíî è  

   UpdateWindow(hwnd);      // ïåðåðèñîâàòü ñîäåðæèìîå

   // Çàïóñòèòü öèêë îáðàáîòêè ñîîáùåíèé 

   while(GetMessage (&msg,NULL,0,0))

      if(!TranslateAccelerator(hwnd,hAccel,&msg))

         {

         TranslateMessage(&msg); // Èñïîëüç.Êëàâèàòóðû

         DispatchMessage (&msg); // Âîçâðàò ê Windows 

         }

   return msg. wParam;

   }

 

// Ñëåäóþùàÿ ôóíêöèÿ âûçûâàåòñÿ îïåðàöèîííîé ñèñòåìîé 

// Windows è ïîëó÷àåò â êà÷åñòâå ïàðàìåòðîâ ñîîáùåíèÿ

// èç î÷åðåäè ñîîáùåíèé äàííîãî ïðèëîæåíèÿ

 

LRESULT CALLBACK WindowFunc(HWND hwnd,

                            UINT message, 

                            WPARAM wParam, 

                            LPARAM lParam)

   {

   HDC         hdc; 

   PAINTSTRUCT paintstruct;

   TEXTMETRIC  tm; 

   STARTUPINFO startin;

   switch(message) 

      {

      case WM_CREATE:       // Ïîëó÷àåì ðàçìåðû ýêðàíà

         maxX=GetSystemMetrics(SM_CXSCREEN);

         maxY=GetSystemMetrics(SM_CYSCREEN);

         hdc=GetDC(hwnd);   // Ñîâìåñò. ñ îêíîì ðàñòð

         memdc=CreateCompatibleDC(hdc);

         hbit=CreateCompatibleBitmap(hdc,maxX,maxY);

         SelectObject(memdc,hbit);

         hbrush=(HBRUSH)GetStockObject(WHITE_BRUSH);

         SelectObject(memdc,hbrush);

         PatBlt(memdc,0,0,maxX,maxY,PATCOPY);

         ReleaseDC(hwnd,hdc);

         break;

      case WM_COMMAND:

         switch(LOWORD(wParam))

            {

            case ID_PROCESS:

               if(procnum == Procmax)

                  {

                  MessageBox(hwnd, 

                            "Íåëüçÿ ñîçäàòü áîëüøå",

                            "Îøèáêà", MB_OK);

                  break;

                  }   // Íå áîëåå ÷åì Procmax

               // Ïîëó÷èòü ìåòðèêè òåêñòà */ 

               GetTextMetrics(memdc, &tm);

               sprintf(str, "Ïîðîæäàåòñÿ ïðîöåññ %d", 

                       procnum); 

               TextOut(memdc, X, Y, str, strlen(str));  

               Y = Y+tm.tmHeight+tm.tmExternalLeading;

               InvalidateRect(hwnd,NULL,1); //Ñîîáùèòü 

               // Ïîðîæäåíèå íîâîãî ïðîöåññà

               startin.cb=sizeof(STARTUPINFO);

               startin.lpReserved = NULL;

               startin.lpDesktop = NULL;

               startin.lpTitle = NULL;

               startin.dwFlags  =STARTF_USESHOWWINDOW;

               startin.cbReserved2 = 0;

               startin.lpReserved2 = NULL;

               startin.wShowWindow = SW_SHOWMINIMIZED;

               CreateProcess(NULL, "Test.exe", NULL, 

                             NULL, FALSE, 0, NULL, 

                             NULL, &startin, 

                             &(pinfo[procnum]));

               procnum++;

               break;

            case ID_KILLPROC: 

               if(procnum)

                  procnum--;

               else

                  {

                  MessageBox(hwnd,

                            "Áîëüøå ïðîöåññîâ íåò",

                            "Îøèáêà", MB_OK);

                  break;

                  }

               // Ïîëó÷èòü ìåòðèêè òåêñòà

               GetTextMetrics(memdc, &tm);

               TerminateProcess

                         (pinfo[procnum].hProcess, 0);

               sprintf(str, "Ïðîöåññ %d çàâåðøåí", 

                       procnum);

               TextOut(memdc, X, Y, str, strlen(str));  

               Y = Y+tm.tmHeight+tm.tmExternalLeading;

               InvalidateRect(hwnd,NULL,1); //Ñîîáùèòü 

               break;

            case ID_HELP:

               MessageBox(hwnd,

                         "F2: Íîâûé ïðîöåññ\n"

                         "F3: Çàâåðøèòü ïðîöåññ",

                         "Ïîìîùü:", MB_OK);

               InvalidateRect(hwnd,NULL,1); //Ñîîáùèòü 

               break;

            }

         break;

      case WM_PAINT:               // Ïåðåðèñîâêà îêíà

         hdc=BeginPaint(hwnd,&paintstruct); // Ïîë. DC

         // Òåïåðü êîïèðóåì ðàñòð èç ïàìÿòè íà ýêðàí

         BitBlt(hdc,0,0,maxX,maxY,memdc,0,0,SRCCOPY);

         EndPaint(hwnd,&paintstruct); // Îñâîáîäèòü DC

         break;

      case WM_DESTROY:         // Çàâåðøåíèå ïðîãðàììû

         DeleteDC(memdc);  // Óäàëèòü âèðòóàëüíîå îêíî

         PostQuitMessage(0);

         break;

      default:

         // Âñå ñîîáùåíèÿ, íå îáðàáàòûâàåìûå â äàííîé

         // ôóíêöèè, íàïðàâëÿþòñÿ íà îáðàáîòêó ïî  

         // óìîë÷àíèþ

         return DefWindowProc(hwnd,message,

                              wParam,lParam);

      } 

   return 0;

   }



index.h
Код

#define ID_PROCESS  100
#define ID_KILLPROC 101
#define ID_HELP     103



index.rc
Код

#include <Windows.h> 
#include "index.h"

MYMENU MENU

   {

   POPUP "Ïðîöåññû"

      {

      MENUITEM "Íîâûé ïðîöåññ",     ID_PROCESS

      MENUITEM "Çàâåðøèòü ïðîöåññ", ID_KILLPROC

      }

   MENUITEM "Ïîìîùü",               ID_HELP

   }

MYMENU ACCELERATORS

   {

   VK_F2, ID_PROCESS,  VIRTKEY

   VK_F3, ID_KILLPROC, VIRTKEY

   VK_F1, ID_HELP,     VIRTKEY

   }


--------------------
PM MAIL WWW ICQ   Вверх
korian
Дата 13.4.2008, 02:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 2
Всего: 17



int WINAPI WinMain (HINSTANCE hThisInst, HINSTANCE hPrevInst,  LPSTR lpszArgs, int nWinMode)
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR    lpCmdLine, int nCmdShow)
поидее так... или UNICODE вырубить...
PM   Вверх
dizzy1984
Дата 14.4.2008, 06:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



Цитата(GOBLIN_TT @  11.4.2008,  15:20 Найти цитируемый пост)
    
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16

Это значит что c runtime library не видит функцию WinMain, которую она бы вызвала из своей, реальной точки входа в вашу программу (что-то вроде WtnMainCRTStartup). Линкер ожидает от вас не WinMain, а wWinMain, т.к  проект UNICODE - единственное, что я могу предположить. Ну и варианты - если проект не UNICODE убрать данную настройку, если он UNICODE использовать wWinMain, если он впоследствии имеет шанст стать UNICODE - то макрос, как предложил korian.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0712 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.