Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
06ca39a394 |
Generated
+8
@@ -0,0 +1,8 @@
|
||||
<?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>
|
||||
Generated
-1
@@ -2,7 +2,6 @@
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<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" />
|
||||
</modules>
|
||||
</component>
|
||||
|
||||
+3
-8
@@ -1,12 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
project(bib C)
|
||||
project(untitled1 C)
|
||||
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
|
||||
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)
|
||||
|
||||
|
||||
add_executable(untitled1 main.c
|
||||
)
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
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
|
||||
@@ -1,50 +1,94 @@
|
||||
//
|
||||
// Created by rsuslov on 23.11.2023.
|
||||
//
|
||||
|
||||
#include <stdio.h>
|
||||
#include <windows.h>
|
||||
#include "libBib.h"
|
||||
|
||||
// Максимальное количество IP-адресов
|
||||
#define MAX_IP_ADDRESSES 10
|
||||
// Максимальная длина IP-адреса
|
||||
#define MAX_IP_ADDRESS_LENGTH 16
|
||||
int main() {
|
||||
HANDLE hComm; // Дескриптор порта
|
||||
char *portName = "COM7"; // Имя порта
|
||||
char *message = "Hello, World!"; // Сообщение для передачи
|
||||
|
||||
typedef char * (*NAME)();
|
||||
// Открытие порта
|
||||
hComm = CreateFile(portName, // Имя порта
|
||||
GENERIC_READ | GENERIC_WRITE, // Доступы для чтения и записи
|
||||
0, // Семафор
|
||||
NULL, // Атрибуты безопасности
|
||||
OPEN_EXISTING, // Открытие существующего
|
||||
FILE_FLAG_OVERLAPPED, // Флаги для асинхронной работы
|
||||
NULL); // Дескриптор безопасности
|
||||
|
||||
int main(){
|
||||
const HINSTANCE hinstanceDll = LoadLibrary("libbiblioteka.dll"); // динамическая загрузка библиотеки
|
||||
if (hinstanceDll == NULL){
|
||||
printf("Alarme obshibka\n");
|
||||
// Если не удалось открыть порт
|
||||
if (hComm == INVALID_HANDLE_VALUE) {
|
||||
// - вывести ошибку и выйти из программы
|
||||
printf("Error when opening port\n");
|
||||
return 1;
|
||||
}
|
||||
// получение функций из библиотеки
|
||||
const NAME getIpAddresses = (NAME) GetProcAddress(hinstanceDll, "getIpAddresses");
|
||||
|
||||
if (getIpAddresses != NULL){
|
||||
char **ipAddresses = (char **) getIpAddresses();
|
||||
if (ipAddresses == NULL) {
|
||||
printf("Failed to retrieve IP addresses\n");
|
||||
// Настройка параметров порта
|
||||
DCB dcbSerialParams = {0}; // Структура хранения параметров порта
|
||||
dcbSerialParams.DCBlength = sizeof(dcbSerialParams); // Размер структуры
|
||||
// Если не удалось получить параметры порта
|
||||
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;
|
||||
}
|
||||
|
||||
// Выводим IP-адреса
|
||||
for (int i = 0; i < MAX_IP_ADDRESSES; i++) {
|
||||
printf("IP address %d: %s\n", i+1, ipAddresses[i]);
|
||||
}
|
||||
printf("Waiting to get result...\n");
|
||||
Sleep(2000);
|
||||
|
||||
// Освобождаем память
|
||||
for (int i = 0; i < MAX_IP_ADDRESSES; i++) {
|
||||
free(ipAddresses[i]);
|
||||
// Ожидание завершения асинхронной операции
|
||||
if (!GetOverlappedResult(hComm, &overlapped, &bytesWritten, TRUE)) {
|
||||
printf("Error when getting overlapped result\n");
|
||||
CloseHandle(hComm);
|
||||
return 1;
|
||||
}
|
||||
free(ipAddresses);
|
||||
|
||||
}
|
||||
// Если сообщение было передано полностью
|
||||
else {
|
||||
printf("Not Find function");
|
||||
bytesWritten = strlen(message);
|
||||
}
|
||||
const long result_2 = factorial(4);
|
||||
printf("Message sent. Byte written: %lu\n", bytesWritten);
|
||||
|
||||
printf("Result 2: %d\n", result_2);
|
||||
FreeLibrary(hinstanceDll);
|
||||
// Закрытие порта
|
||||
CloseHandle(hComm);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user