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">
|
<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>
|
||||||
|
|||||||
+3
-8
@@ -1,12 +1,7 @@
|
|||||||
cmake_minimum_required(VERSION 3.26)
|
cmake_minimum_required(VERSION 3.26)
|
||||||
project(bib C)
|
project(untitled1 C)
|
||||||
|
|
||||||
set(CMAKE_C_STANDARD 11)
|
set(CMAKE_C_STANDARD 11)
|
||||||
|
|
||||||
add_library(biblioteka SHARED lib/library.c lib/library.h)
|
add_executable(untitled1 main.c
|
||||||
set_target_properties(biblioteka PROPERTIES LINKER_LANGUAGE C)
|
)
|
||||||
|
|
||||||
add_executable(bib main.c libBib.h)
|
|
||||||
target_link_libraries(bib biblioteka)
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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 <stdio.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include "libBib.h"
|
|
||||||
|
|
||||||
// Максимальное количество IP-адресов
|
int main() {
|
||||||
#define MAX_IP_ADDRESSES 10
|
HANDLE hComm; // Дескриптор порта
|
||||||
// Максимальная длина IP-адреса
|
char *portName = "COM7"; // Имя порта
|
||||||
#define MAX_IP_ADDRESS_LENGTH 16
|
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 (hComm == INVALID_HANDLE_VALUE) {
|
||||||
if (hinstanceDll == NULL){
|
// - вывести ошибку и выйти из программы
|
||||||
printf("Alarme obshibka\n");
|
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");
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Выводим IP-адреса
|
// Настройка параметров порта
|
||||||
for (int i = 0; i < MAX_IP_ADDRESSES; i++) {
|
DCB dcbSerialParams = {0}; // Структура хранения параметров порта
|
||||||
printf("IP address %d: %s\n", i+1, ipAddresses[i]);
|
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; // Количество переданных байт
|
||||||
for (int i = 0; i < MAX_IP_ADDRESSES; i++) {
|
OVERLAPPED overlapped = {0}; // Передача данных в асинхронном режиме
|
||||||
free(ipAddresses[i]);
|
overlapped.hEvent = CreateEvent(NULL, // Определяет, может ли созданный объект события быть унаследован в дочерних процессах. При передаче значения NULL объект не может быть унаследован.
|
||||||
}
|
TRUE, // Будет ли событие установлено в несигнальное состояние после срабатывания (TRUE) или автоматически переходит в несигнальное состояние после ожидания одним потоком (FALSE).
|
||||||
free(ipAddresses);
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("Waiting to get result...\n");
|
||||||
|
Sleep(2000);
|
||||||
|
|
||||||
|
// Ожидание завершения асинхронной операции
|
||||||
|
if (!GetOverlappedResult(hComm, &overlapped, &bytesWritten, TRUE)) {
|
||||||
|
printf("Error when getting overlapped result\n");
|
||||||
|
CloseHandle(hComm);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Если сообщение было передано полностью
|
||||||
else {
|
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