Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3b0e06fa1c |
Generated
-8
@@ -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>
|
|
||||||
Generated
+1
@@ -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
@@ -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)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
|
||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user