1 Commits
l4 .. l3
Author SHA1 Message Date
Суслов Роман 3b0e06fa1c L3 - v1 2024-01-10 14:48:38 +03:00
5 changed files with 42 additions and 159 deletions
-8
View File
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="CPP_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
+1
View File
@@ -2,6 +2,7 @@
<project version="4"> <project version="4">
<component name="ProjectModuleManager"> <component name="ProjectModuleManager">
<modules> <modules>
<module fileurl="file://$PROJECT_DIR$/.idea/APD_L1.iml" filepath="$PROJECT_DIR$/.idea/APD_L1.iml" />
<module fileurl="file://$PROJECT_DIR$/.idea/biblioteka.iml" filepath="$PROJECT_DIR$/.idea/biblioteka.iml" /> <module fileurl="file://$PROJECT_DIR$/.idea/biblioteka.iml" filepath="$PROJECT_DIR$/.idea/biblioteka.iml" />
</modules> </modules>
</component> </component>
+8 -3
View File
@@ -1,7 +1,12 @@
cmake_minimum_required(VERSION 3.26) cmake_minimum_required(VERSION 3.26)
project(untitled1 C) project(bib C)
set(CMAKE_C_STANDARD 11) set(CMAKE_C_STANDARD 11)
add_executable(untitled1 main.c add_library(biblioteka SHARED lib/library.c lib/library.h)
) set_target_properties(biblioteka PROPERTIES LINKER_LANGUAGE C)
add_executable(bib main.c libBib.h)
target_link_libraries(bib biblioteka)
-71
View File
@@ -1,71 +0,0 @@
CMakeLists.txt.user
CMakeCache.txt
CMakeFiles
CMakeScripts
Testing
Makefile
cmake_install.cmake
install_manifest.txt
compile_commands.json
CTestTestfile.cmake
_deps
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# SonarLint plugin
.idea/sonarlint/
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
+33 -77
View File
@@ -1,94 +1,50 @@
//
// Created by rsuslov on 23.11.2023.
//
#include <stdio.h> #include <stdio.h>
#include <windows.h> #include <windows.h>
#include "libBib.h"
int main() { // Максимальное количество IP-адресов
HANDLE hComm; // Дескриптор порта #define MAX_IP_ADDRESSES 10
char *portName = "COM7"; // Имя порта // Максимальная длина IP-адреса
char *message = "Hello, World!"; // Сообщение для передачи #define MAX_IP_ADDRESS_LENGTH 16
// Открытие порта typedef char * (*NAME)();
hComm = CreateFile(portName, // Имя порта
GENERIC_READ | GENERIC_WRITE, // Доступы для чтения и записи
0, // Семафор
NULL, // Атрибуты безопасности
OPEN_EXISTING, // Открытие существующего
FILE_FLAG_OVERLAPPED, // Флаги для асинхронной работы
NULL); // Дескриптор безопасности
// Если не удалось открыть порт int main(){
if (hComm == INVALID_HANDLE_VALUE) { const HINSTANCE hinstanceDll = LoadLibrary("libbiblioteka.dll"); // динамическая загрузка библиотеки
// - вывести ошибку и выйти из программы if (hinstanceDll == NULL){
printf("Error when opening port\n"); printf("Alarme obshibka\n");
return 1; return 1;
} }
// получение функций из библиотеки
const NAME getIpAddresses = (NAME) GetProcAddress(hinstanceDll, "getIpAddresses");
// Настройка параметров порта if (getIpAddresses != NULL){
DCB dcbSerialParams = {0}; // Структура хранения параметров порта char **ipAddresses = (char **) getIpAddresses();
dcbSerialParams.DCBlength = sizeof(dcbSerialParams); // Размер структуры if (ipAddresses == NULL) {
// Если не удалось получить параметры порта printf("Failed to retrieve IP addresses\n");
if (!GetCommState(hComm, &dcbSerialParams)) {
// - вывести ошибку, закрыть дескриптор порта и выйти из программы
printf("Error when getting port state\n");
CloseHandle(hComm);
return 1;
}
// Установка параметров порта
dcbSerialParams.BaudRate = CBR_9600; // Скорость передачи данных
dcbSerialParams.ByteSize = 8; // Длина символа
dcbSerialParams.StopBits = ONESTOPBIT; // Количество стоповых бит (1)
dcbSerialParams.Parity = NOPARITY; // Четность (отсутствует)
// Если не удалось установить параметры порта
if (!SetCommState(hComm, &dcbSerialParams)) {
// - вывести ошибку, закрыть дескриптор порта и выйти из программы
printf("Error when setting port state\n");
CloseHandle(hComm);
return 1;
}
DWORD bytesWritten; // Количество переданных байт
OVERLAPPED overlapped = {0}; // Передача данных в асинхронном режиме
overlapped.hEvent = CreateEvent(NULL, // Определяет, может ли созданный объект события быть унаследован в дочерних процессах. При передаче значения NULL объект не может быть унаследован.
TRUE, // Будет ли событие установлено в несигнальное состояние после срабатывания (TRUE) или автоматически переходит в несигнальное состояние после ожидания одним потоком (FALSE).
FALSE, // Будет ли объект события создан в несигнальном (сброшенном) состоянии (FALSE) или в сигнальном состоянии (TRUE). вызова функции.
NULL); // Указатель на строку, содержащую имя объекта события. Если имя является уникальным, можно использовать значение NULL.
printf("Waiting to write...\n");
Sleep(2000);
// Асинхронная передача сообщения
if (!WriteFile(hComm, // Дескриптор порта
message, // Сообщение для передачи
strlen(message), // Размер сообщения
NULL, // Количество переданных байт (NULL для асинхронной работы)
&overlapped)) // Передача данных в асинхронном режиме
{
// Если не удалось асинхронно записать данные
if (GetLastError() != ERROR_IO_PENDING) {
printf("Error when writing to port\n");
CloseHandle(hComm);
return 1; return 1;
} }
printf("Waiting to get result...\n"); // Выводим IP-адреса
Sleep(2000); for (int i = 0; i < MAX_IP_ADDRESSES; i++) {
printf("IP address %d: %s\n", i+1, ipAddresses[i]);
// Ожидание завершения асинхронной операции
if (!GetOverlappedResult(hComm, &overlapped, &bytesWritten, TRUE)) {
printf("Error when getting overlapped result\n");
CloseHandle(hComm);
return 1;
} }
// Освобождаем память
for (int i = 0; i < MAX_IP_ADDRESSES; i++) {
free(ipAddresses[i]);
}
free(ipAddresses);
} }
// Если сообщение было передано полностью
else { else {
bytesWritten = strlen(message); printf("Not Find function");
} }
printf("Message sent. Byte written: %lu\n", bytesWritten); const long result_2 = factorial(4);
// Закрытие порта printf("Result 2: %d\n", result_2);
CloseHandle(hComm); FreeLibrary(hinstanceDll);
return 0;
} }