Просмотр исходного кода

Загрузить файлы ''

Анастасия Александровна Жулина 1 год назад
Родитель
Сommit
d809011f5a
1 измененных файлов с 390 добавлено и 0 удалено
  1. 390 0
      Задание3.txt

+ 390 - 0
Задание3.txt

@@ -0,0 +1,390 @@
+DLL
+#include "../DllдляПрикладного/Header.h"//подключил заголовок из другого проекта
+BOOL WINAPI DllMain(HINSTANCE hlnstDll, DWORD dwReason, LPVOID IpReserved)
+{
+        BOOL bAllWentWell = TRUE;
+        switch (dwReason)
+        {
+        case DLL_PROCESS_ATTACH:
+                break;
+        case DLL_THREAD_ATTACH:
+                break;
+        case DLL_THREAD_DETACH:
+                break;
+        case DLL_PROCESS_DETACH:
+                break;
+        }
+        if (bAllWentWell)
+                return TRUE;
+        else
+                return FALSE;
+}
+LPWSTR Reading(LPWSTR path)
+{
+        DWORD d = 0;
+        HINSTANCE FileHandle = CreateFile(PATH, GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+        LPWSTR ReadString = calloc(100500, sizeof(WCHAR));
+        ReadFile(FileHandle, ReadString, 100500 * sizeof(WCHAR), &d, NULL);
+        CloseHandle(FileHandle);
+        ReadString[d / 2] = '\n';
+        ReadString[d / 2 + 1] = '\0';
+        return ReadString;
+}
+DWORD LpwstrToDword(LPWSTR str)
+{
+        DWORD dw = 0;
+        for (size_t i = 0; i < wcslen(str); i++)
+        {
+                dw += (str[i] - '0');
+                dw *= 10;
+        }
+        return dw / 10;
+}
+DWORD CountUsers(LPWSTR str)
+{
+        DWORD count = 0;
+        for (size_t i = 0; i < wcslen(str); i++)
+        {
+                if (str[i] == L'\n') count++;
+        }
+        return count;
+}
+__declspec(dllexport) U* CreateUserArray(LPWSTR path, LPDWORD n)
+{
+        LPWSTR str = Reading(path);
+        DWORD count = CountUsers(str);
+        U* users = calloc(count, sizeof(U));
+        DWORD poz = 0, zap = 0, ind = 0;
+        LPWSTR strvozr = calloc(3, sizeof(TCHAR));
+        for (size_t i = 1; i < wcslen(str); i++)
+        {
+                if (str[i] == '\n')
+                {
+                        strvozr = calloc(3, sizeof(TCHAR));
+                        zap++;
+                        poz = 0;
+                        ind = 0;
+                }
+                else
+                {
+                        if (str[i] == ';')
+                        {
+                                poz++;
+                                ind = 0;
+                        }
+                        else
+                        {
+                                if (poz == 0)
+                                        users[zap].f[ind] = str[i];
+                                if (poz == 1)
+                                        users[zap].i[ind] = str[i];
+                                if (poz == 2)
+                                        users[zap].o[ind] = str[i];
+                                if (poz == 3)
+                                        users[zap].g[ind] = str[i];
+                                if (poz == 4)
+                                {
+                                        if (str[i] == '\r')
+                                        {
+                                                strvozr[ind] = '\0';
+                                                users[zap].vozr = LpwstrToDword(strvozr);
+                                                free(strvozr);
+                                        }
+                                        else strvozr[ind] = str[i];
+                                }
+                                ind++;
+                        }
+                }
+        }
+        *n = count;
+        return users;
+}
+__declspec(dllexport) U1* Ubel(U* users, LPDWORD count)
+{
+        DWORD indUser = 0, con = 0, f = 0;
+        for (DWORD i = 0; i < *count; i++) 
+        {
+                if (users[i].vozr%5==0)
+                {
+                        con++;
+                }
+        }
+        con++;
+        U1* Ubel = calloc(con, sizeof(U1));
+        Ubel[0].f[0] = (WCHAR)65279;
+        indUser++;
+        for (DWORD i = 0; i < *count; i++) 
+        {
+                if (users[i].vozr % 5 == 0)
+                {
+                        for (DWORD j = 0; j < wcslen(users[i].o); j++)
+                        {
+                                Ubel[indUser].f[j] = users[i].f[j];
+                        }
+                        for (DWORD j = 0; j < wcslen(users[i].i); j++)
+                        {
+                                Ubel[indUser].i[j] = users[i].i[j];
+                        }
+                        for (DWORD j = 0; j < wcslen(users[i].o); j++)
+                        {
+                                Ubel[indUser].o[j] = users[i].o[j];
+                        }
+                        Ubel[indUser].vozr = users[i].vozr;
+                        indUser++;
+                }
+        }
+        *count = con;
+        return Ubel;
+}
+__declspec(dllexport) float Age(U* users, LPDWORD count)
+{
+        float avg = 0;
+        for (DWORD i = 1; i < *count; i++)
+        {
+                avg += users[i].vozr;
+        }
+        avg = avg / (*count - 1);
+        return avg;
+}
+__declspec(dllexport) LPWSTR Dlina(U* users, LPDWORD count)
+{
+        DWORD ind = 0, indUser = 0, f = 0;
+        DWORD max = 0;
+        for (DWORD i = 0; i < *count; i++)
+        {
+                size_t l1 = strlen(users[i].f);
+                size_t l2 = strlen(users[i].i);
+                size_t l3 = strlen(users[i].o);
+                if (l1 + l2 + l3 > max)
+                {
+                        max = l1 + l2 + l3;
+                        ind = i;
+                }
+        }
+        char third[512];
+        swprintf(third, sizeof(third), L"%s%s%s", users[ind].f, users[ind].i, users[ind].o);
+        return third;
+}
+__declspec(dllexport) DWORD kolvo(U* users, LPDWORD count)
+{
+        DWORD ind = 0, indUser = 0, con = 0, f = 0;
+        WCHAR str = L'м';
+        
+        for (DWORD i = 0; i < *count; i++)
+        {
+                if (users[i].g[0] == str) con++;
+        }
+        
+        *count = con;
+        return con;
+}
+
+
+}
+Main
+#include "header.h"
+#include "header1.h"
+#include <strsafe.h>
+#define PATHDLL L"DLL.dll"
+#define PATHLIST L"Users.csv"
+typedef U1* (_cdecl* MyFunction)(LPWSTR, LPDWORD);
+typedef U* (_cdecl* MyFunction1)(U*, LPDWORD);
+typedef float(_cdecl* MyFunction2) (U*, LPDWORD);
+typedef LPWSTR(_cdecl* MyFunction3) (U*, LPDWORD);
+typedef DWORD(_cdecl* MyFunction4) (U*, LPDWORD);
+int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
+{
+        //Задание 1
+        HINSTANCE MyDLL;
+        if (!(MyDLL = LoadLibrary(PATHDLL))) return 1;
+        MyFunction UserList = (MyFunction)GetProcAddress(MyDLL, "CreateUserArray");
+        MyFunction1 UserList1 = (MyFunction1)GetProcAddress(MyDLL, "Ubel");
+        MyFunction2 AvgUserList = (MyFunction2)GetProcAddress(MyDLL, "Age");
+        MyFunction3 MaxFIOUser = (MyFunction3)GetProcAddress(MyDLL, "Dlina");
+        MyFunction4 KolvoM = (MyFunction4)GetProcAddress(MyDLL, "kolvo");
+        DWORD count = 0;
+        U* users = UserList(PATH, &count);
+        DWORD w;
+        HINSTANCE FileHandle = CreateFile(L"1.csv", GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+        TCHAR otvFile[512];
+        TCHAR BuferObmena[512];
+        for (size_t i = 0; i < count-1; i++)
+        {
+                users[i].f[wcslen(users[i].f)] = (WCHAR)';';
+                WriteFile(FileHandle, users[i].f, wcslen(users[i].f) * sizeof(WCHAR), &w, NULL);
+                users[i].i[wcslen(users[i].i)] = (WCHAR)';';
+                WriteFile(FileHandle, users[i].i, wcslen(users[i].i) * sizeof(WCHAR), &w, NULL);
+                users[i].o[wcslen(users[i].o)] = (WCHAR)';';
+                WriteFile(FileHandle, users[i].o, wcslen(users[i].o) * sizeof(WCHAR), &w, NULL);
+                users[i].g[wcslen(users[i].g)] = (WCHAR)';';
+                WriteFile(FileHandle, users[i].g, wcslen(users[i].g) * sizeof(WCHAR), &w, NULL);
+
+
+                swprintf(otvFile, 512, TEXT("%d\r\n"), users[i].vozr);
+
+
+        //        swprintf(BuferObmena, 512, TEXT("%s;%s;%s;$s\0"), users[i].vozr);
+
+
+                
+                DWORD len = 0;
+                while (otvFile[len] != '\0')
+                {
+                        len++;
+                }
+                DWORD dz = 0;
+                WriteFile(FileHandle,
+                        otvFile,
+                        len * (sizeof(char) * 2),
+                        &dz,
+                        NULL
+                );
+        }
+        CloseHandle(FileHandle);
+        //Задание 2
+        DWORD w1;
+        TCHAR otvFile2[512];
+        DWORD count2 = count;
+        U1* ubel = UserList1(users, &count2);
+        HINSTANCE FileHandle2 = CreateFile(L"2.txt", GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+        for (size_t i = 1; i < count2-1; i++)
+        {
+                ubel[i].f[wcslen(ubel[i].f)] = (WCHAR)' ';
+                WriteFile(FileHandle2, ubel[i].f, wcslen(ubel[i].f) * sizeof(WCHAR), &w1, NULL);
+                ubel[i].i[wcslen(ubel[i].i)] = (WCHAR)' ';
+                WriteFile(FileHandle2, ubel[i].i, wcslen(ubel[i].i) * sizeof(WCHAR), &w1, NULL);
+                ubel[i].o[wcslen(ubel[i].o)] = (WCHAR)' ';
+                WriteFile(FileHandle2, ubel[i].o, wcslen(ubel[i].o) * sizeof(WCHAR), &w1, NULL);
+
+
+                swprintf(otvFile2, 512, TEXT("%d\r\n"), ubel[i].vozr);
+                DWORD len = 0;
+                while (otvFile2[len] != '\0')
+                {
+                        len++;
+                }
+                DWORD dz = 0;
+                WriteFile(FileHandle2,
+                        otvFile2,
+                        len * (sizeof(char) * 2),
+                        &dz,
+                        NULL
+                );
+        }        
+        CloseHandle(FileHandle2);
+        //Задание 3 Средний возраст
+        HKEY hKey = NULL;
+        if (RegOpenKey(HKEY_CURRENT_USER, NULL, &hKey) != ERROR_SUCCESS)
+                return 1;
+        DWORD avg = AvgUserList(users, &count);
+        /*avg = (avg + AvgUserList(users, &count)) / 2;*/
+        if (RegSetValueEx(hKey, TEXT("ParamSize"), 0, REG_DWORD, (const BYTE*)&avg, sizeof(avg)) == ERROR_SUCCESS)
+        {
+                MessageBox(NULL, L"Ключ успешно создан", L"MyKey", MB_OK | MB_ICONINFORMATION);
+        }
+        DWORD DataType = 0;
+        DWORD DataLen = 100500;
+        DWORD SIZEE;
+        TCHAR sZ[100];
+        if (RegGetValueW(HKEY_CURRENT_USER, NULL, L"ParamSIze", RRF_RT_DWORD, &DataType, &SIZEE, &DataLen) == ERROR_SUCCESS)
+        {
+                StringCbPrintf(sZ, 100, TEXT("%d"), SIZEE);
+                MessageBox(NULL, sZ, L"Средний возраст", MB_OK | MB_ICONINFORMATION);
+
+
+        }
+        else
+        {
+                MessageBox(NULL, L"Что-то пошло не так", L"Информация", MB_OK);
+        }
+        RegCloseKey(hKey);
+        //Задание 3 Сама длинная ФИО
+        HKEY hKey2 = NULL;
+        if (RegOpenKey(HKEY_CURRENT_USER, NULL, &hKey2) != ERROR_SUCCESS) 
+                return 1;
+        if (RegSetValueW(hKey2, L"Mykey", REG_SZ, L"Значение по умолчанию", 22 * sizeof(WCHAR)) == ERROR_SUCCESS)
+        {
+                MessageBox(NULL, L"Ключ успешно создан", L"Информация", MB_OK);
+        }
+        LPWSTR maxst = MaxFIOUser(users, &count);
+        TCHAR buff2[512];
+        wsprintf(buff2, L"%s", maxst);
+        if (RegSetValueExW(hKey2, L"Mykeys", NULL, REG_SZ, &buff2, 22 * sizeof(WCHAR)) == ERROR_SUCCESS)
+        {
+                MessageBox(NULL, &buff2, L"ФИО", MB_OK | MB_ICONINFORMATION);
+        }
+        else
+        {
+                MessageBox(NULL, L"Что-то пошло не так", L"Информация", MB_OK);
+        }
+        RegCloseKey(hKey2);
+        //Задание 3 Количество мужчин
+        HKEY hKey3 = NULL;
+        if (RegOpenKey(HKEY_CURRENT_USER, NULL, &hKey3) != ERROR_SUCCESS)
+                return 1;
+        DWORD kol = KolvoM(users, &count);
+        if (RegSetValueEx(hKey3, TEXT("ParamSize3"), 0, REG_DWORD, (const BYTE*)&kol, sizeof(kol)) == ERROR_SUCCESS)
+        {
+                MessageBox(NULL, L"Ключ успешно создан", L"MyKey3", MB_OK | MB_ICONINFORMATION);
+        }
+        DWORD DataType2 = 0;
+        DWORD DataLen2 = 100500;
+        DWORD SIZEE2;
+        TCHAR sZ2[100];
+        if (RegGetValueW(HKEY_CURRENT_USER, NULL, L"ParamSIze3", RRF_RT_DWORD, &DataType2, &SIZEE2, &DataLen2) == ERROR_SUCCESS)
+        {
+                StringCbPrintf(sZ2, 100, TEXT("%d"), SIZEE2);
+                MessageBox(NULL, sZ2, L"Количесво мужчин", MB_OK | MB_ICONINFORMATION);
+
+
+        }
+        else
+        {
+                MessageBox(NULL, L"Что-то пошло не так", L"Информация", MB_OK);
+        }
+        ClipboardInputText(otvFile);
+        RegCloseKey(hKey3);
+}
+Заголовков 1
+#pragma once
+#define _CRT_SECURE_NO_WARNINGS
+#include <Windows.h>
+#include <stdio.h>
+#define PATH L"Users.csv"
+struct User
+{
+    WCHAR f[30];
+    WCHAR i[30];
+    WCHAR o[30];
+    WCHAR g[5];
+    DWORD vozr;
+};
+typedef struct User U;
+struct Ubel
+{
+    WCHAR f[30];
+    WCHAR i[30];
+    WCHAR o[30];
+    WCHAR g[5];
+    DWORD vozr;
+};
+typedef struct Ubel U1;
+Заголовков 2
+#pragma once
+#define _CRT_SECURE_NO_WARNINGS
+#include <Windows.h>
+#include <stdio.h>
+int ClipboardInputText(LPWSTR buffer)//записать строку в системный буфер
+{
+        DWORD len;
+        HANDLE hMenu;
+        len = wcslen(buffer) + 1;
+        hMenu = GlobalAlloc(GMEM_MOVEABLE, len * sizeof(LPWSTR));
+        memcpy(GlobalLock(hMenu), buffer, len * sizeof(LPWSTR));
+        GlobalUnlock(hMenu);
+        OpenClipboard(0);
+        EmptyClipboard();
+        SetClipboardData(CF_UNICODETEXT, hMenu);
+        CloseClipboard();
+        return 0;
+}