Форум программистов, компьютерный форум CyberForum.ru

Преобразование void* в структуру - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Аргументы командной строки http://www.cyberforum.ru/cpp-beginners/thread634979.html
Здравствуйте, у меня вопрос, почему программа сбрасывается, так и не выполнив никаких действий? Я знаю , что она возвращает 0 и выходит, но почему она не выполняет действие? #include "stdafx.h" #include "stdlib.h" #include <conio.h> #include <iostream> #include <string> #include <iomanip> #include <sstream> #include <stdexcept>
C++ Запись в текстовый файл адресов вместо строк Всем привет. Ребята, читаю из бинарного файла структуру и хочу все записать в текстовый файл. Структура struct Client { wchar_t strname;//ФИО клиента http://www.cyberforum.ru/cpp-beginners/thread634976.html
Найти число пассажиров, имеющих более двух вещей и... C++
Тема: Записи. Работа с текстовыми файлами. Дан файл f, содержащий сведения о багаже нескольких пассажиров. Багаж пассажира характеризуется количеством вещей и общим весом вещей. Сведения о багаже каждого пассажира представляют собой запись с двумя полями: одно поле целого типа (количество вещей) и одно - действительное (вес в килограммах). Найти число пассажиров, имеющих более двух вещей и число...
C++ Не появляются файлы в каталоге проекта
Почему когда я добавляю в проект заранее подготовленные файлы(.cpp, .h, .rc), они не появляются в каталоге проекта? P.S. Visual Studio 2008
C++ Комбинаторика! Число сочитаний http://www.cyberforum.ru/cpp-beginners/thread634917.html
Доброго времени суток. Так как я глубоко начинающий программист, столкнулся с проблемой решения задач по комбинаторике (на данный момент формула числа сочитаний). Каким образом можно записать эту формулу на С++, знаю имееться много способов (через рекурсию и т.д.)? Можете, пожалуйста, написать реализацию и объяснить? Вот пример через рекурсию, но никак не пойму принцип работы, объясните? Сама...
C++ Цикл Начал изучать C++ неделю назад. Теперь начал решать некоторые задачи. И возникли у меня некоторые сложности с циклами... Требуется ваша помощь... Задача: Переведите натуральное число из двоичной системы в десятичную (в двоичном числе не более 10 цифр). Решение: #include <iostream> using namespace std; подробнее

Показать сообщение отдельно
NickoTin
Модератор
 Аватар для NickoTin
8173 / 3477 / 233
Регистрация: 14.06.2010
Сообщений: 4,501
Записей в блоге: 9
09.08.2012, 00:32     Преобразование void* в структуру
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <Windows.h>
#include <stdio.h>
 
#define AIMP2_RemoteClass L"AIMP2_RemoteInfo"
#define AIMP2_RemoteClassSize 2048
 
#pragma pack(push, 1)
typedef struct _AIMP2FileInfo
{
    DWORD cbSizeOf;
    //
    BOOL nActive;
    DWORD nBitRate;
    DWORD nChannels;
    DWORD nDuration;
    INT64 nFileSize;
    DWORD nRating;
    DWORD nSampleRate;
    DWORD nTrackID;
    //
    DWORD nAlbumLen;
    DWORD nArtistLen;
    DWORD nDateLen;
    DWORD nFileNameLen;
    DWORD nGenreLen;
    DWORD nTitleLen;
    //
    PWCHAR sAlbum;
    PWCHAR sArtist;
    PWCHAR sDate;
    PWCHAR sFileName;
    PWCHAR sGenre;
    PWCHAR sTitle;
} AIMP2FileInfo, *PAIMP2FileInfo;
#pragma pack(pop)
 
int __cdecl
wmain()
{
    HANDLE          hAIMP;
    PAIMP2FileInfo  aimpFileInfo;
    LPWSTR          pBuff;
 
    hAIMP = OpenFileMapping(FILE_MAP_READ, FALSE, AIMP2_RemoteClass);
 
    if ( !hAIMP )
    {
        wprintf(L"error %d\r\n", GetLastError());
        return 1;
    }
 
    aimpFileInfo = (PAIMP2FileInfo)MapViewOfFile(hAIMP, FILE_MAP_READ, 0, 0, AIMP2_RemoteClassSize);
 
    if ( aimpFileInfo )
    {
        WCHAR buff[256];
 
#define WRITE_TO_BUFF(x) \
    memcpy(buff, pBuff, (x) * 2); \
    buff[x] = '\0'; \
    pBuff += (x);
    
        // В pBuff вся остальная информация, разбивайте её испольуя поля nAlbumLen (и т.п.)
        // из структуры aimpFileInfo
        pBuff = (LPWSTR)((PBYTE)aimpFileInfo + aimpFileInfo->cbSizeOf);
 
        wprintf(L"%d Hz, %d kbps, %d chans\r\n", aimpFileInfo->nSampleRate, aimpFileInfo->nBitRate, aimpFileInfo->nChannels);
        wprintf(L"%d seconds, %d bytes\r\n", aimpFileInfo->nDuration / 1000, aimpFileInfo->nFileSize);
 
        WRITE_TO_BUFF(aimpFileInfo->nAlbumLen)
        wprintf(L"Album: %s\r\n", buff);
        WRITE_TO_BUFF(aimpFileInfo->nArtistLen)
        wprintf(L"Artist: %s\r\n", buff);
        WRITE_TO_BUFF(aimpFileInfo->nDateLen)
        wprintf(L"Date: %s\r\n", buff);
        WRITE_TO_BUFF(aimpFileInfo->nFileNameLen)
        wprintf(L"File name: %s\r\n", buff);
        WRITE_TO_BUFF(aimpFileInfo->nGenreLen)
        wprintf(L"Genre: %s\r\n", buff);
        WRITE_TO_BUFF(aimpFileInfo->nTitleLen)
        wprintf(L"Title: %s\r\n", buff);
        
        UnmapViewOfFile(aimpFileInfo);
    }
 
    CloseHandle(hAIMP);
    system("pause");
    return 0;
}
 
Текущее время: 00:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru