Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Windows приложения в Visual Studio 2005


Автор: merfi 29.5.2008, 17:06
Помогите совсем запутался !!!!
ПО: Visual Studio 2005
Язык С++ (именно С++)
Суть проблемы :
Код содрал в Инете . Программка показывает все процессы в Win и их PID .
В Visual Studio выбрал VC++ - Win32 Console Application. Все опции по умолчению . Добавил следующий код

Код

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <psapi.h>

void PrintProcessNameAndID( DWORD processID )
{
    TCHAR szProcessName[MAX_PATH] = TEXT("<unknown>");

    // Get a handle to the process.

    HANDLE hProcess = OpenProcess( PROCESS_QUERY_INFORMATION |
                                   PROCESS_VM_READ,
                                   FALSE, processID );

    // Get the process name.

    if (NULL != hProcess )
    {
        HMODULE hMod;
        DWORD cbNeeded;

        if ( EnumProcessModules( hProcess, &hMod, sizeof(hMod), 
             &cbNeeded) )
        {
            GetModuleBaseName( hProcess, hMod, szProcessName, 
                               sizeof(szProcessName)/sizeof(TCHAR) );
        }
    }

    // Print the process name and identifier.

    _tprintf( TEXT("%s  (PID: %u)\n"), szProcessName, processID );

    CloseHandle( hProcess );
}

void main( )
{
    // Get the list of process identifiers.

    DWORD aProcesses[1024], cbNeeded, cProcesses;
    unsigned int i;

    if ( !EnumProcesses( aProcesses, sizeof(aProcesses), &cbNeeded ) )
        return;

    // Calculate how many process identifiers were returned.

    cProcesses = cbNeeded / sizeof(DWORD);

    // Print the name and process identifier for each process.

 for ( i = 0; i < cProcesses; i++ )
        PrintProcessNameAndID( aProcesses[i] );
}

В консольном варианте все работало просто прекрасно

Затем решил создать визуальное приложение 
Тип проекта Visual C++ - Windows Forms Application
Все нарисовал и добавил тот же самы код 
И тут начались все проблемы 

1 Пишет что тип DWORD не известен
пытался вписать using namespace Microsoft::Win32. Не помогло 
2 Проект называется DeletePid . Мастер создал файлик DeletePid.cpp В нем ксть строчка 
using namaspace DeletePid. Пока не закоментировал писала ошибку 

Вобщем подскажите как правильно размещать свои  функции (вернее даже где размещать )

Проект занимает 5МВ . Если будет не лень посмотрель  могу скинуть на мыло


Автор: Andrey44 30.5.2008, 08:03
merfi,  smile ну во-первых помоему ты не в том разделе вопрос задаешь,
а во-вторых используй тэг КОД, ну не понятно-же ничего smile 

Автор: Walker 30.5.2008, 13:49
merfi, всё гоняют с этим вопросом. smile  Из диеза в плюсы, из плюсов в диез. А всё потому, что ты в проекте смешал в кучу две среды исполнения. Давай прояснять.
Windows Forms - интерфейсная графическая оболочка, писанная под .net и обязана запускаться только под управлением CLR. .Net имеет собственный взгляд на систему типов, которому чужды представления о всяких WinAPI'шных DWORD.
Отсюда простор действий:
1) ищем .net-овские типы, реализующие нужный функционал и переписываем код.
2) создаём dll из функций консольного приложения и используем её в соответствии с PInvoke.
3) выбираем другую графическую оболочку. (Не WPF! smile )

Удачи!

Автор: jonie 30.5.2008, 22:09
4) делаем COM компонент, и используем его через proxy сборку

Автор: merfi 2.6.2008, 09:35
Спасибо Будем разбираться со средами и искать нужные типы в .net 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)