Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 1
Регистрация: 28.03.2015
Сообщений: 59
1

Import библиотеки

28.07.2017, 05:59. Показов 3730. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
У меня на компьютере установлена программа, которая имеет набор API функций, но на сколько я понял эти API лежат не в отдельной dll а в самом exe.
В Delphi есть штука project->ImportTypeLibrary, там я могу найти этот exe и импортировать все эту информацию в Delphi.
Вот в чем вопрос, есть ли для C# подобная штука?
На сколько знаю эти API могут использоваться на C#, C++, VB, Pascal. У меня есть подобная библиотека dll с API только другой программы и на C# у меня все нормально работает.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.07.2017, 05:59
Ответы с готовыми решениями:

Создание dll библиотеки в C#. Вызов классов этой библиотеки
мне нужно как то создать динамическую библиотеку класов в си шарп, основой этой библиотеки должен...

Не получается сделать import библиотеки
Подскажите, как подключить внешнюю библиотеку к сервлет проекту? Пихаю я...

#import библиотеки в зависимости от версии Excel
Добрый день! В своём приложении экспортирую в Excel данные. Сейчас всё настроено под Excel 2013. ...

Import Error: could not import module 'PySide.QtXml'
Запаковал скрипт в exe. При запуске вылетает ошибка(см. скрин). Не понимаю как устранить ошибку....

13
Эксперт .NET
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,601
28.07.2017, 06:40 2
Цитата Сообщение от Hockmoon911 Посмотреть сообщение
Вот в чем вопрос, есть ли для C# подобная штука?
Нет. В C# этого не требуется. Все импортируемые функции описываются в коде вручную с помощью атрибута DllImport. Погуглите по ключевым словам "DllImport", "P\Invoke". Посмотрите FAQ-ки на данном форуме.
0
0 / 0 / 1
Регистрация: 28.03.2015
Сообщений: 59
28.07.2017, 11:48  [ТС] 3
Цитата Сообщение от Usaga Посмотреть сообщение
Нет. В C# этого не требуется. Все импортируемые функции описываются в коде вручную с помощью атрибута DllImport. Погуглите по ключевым словам "DllImport", "P\Invoke". Посмотрите FAQ-ки на данном форуме.
Погуглил. В общем понял что это только я не нашел примеров с .exe, сработает - нет?
И в тех примерах что находил, там насколько понимаю вызывались только статик функции, а объект не получится создать?
0
Эксперт .NET
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,601
28.07.2017, 11:51 4
Лучший ответ Сообщение было отмечено Hockmoon911 как решение

Решение

Hockmoon911, DllImport можно применить только к статическим методам. EXE можно использовать как DLL, внутри они одинаково устроены.
1
0 / 0 / 1
Регистрация: 28.03.2015
Сообщений: 59
28.07.2017, 12:02  [ТС] 5
Цитата Сообщение от Usaga Посмотреть сообщение
Hockmoon911, DllImport можно применить только к статическим методам.
Тогда это не совсем подходит. Так как самое первое что нужно сделать это создать объект основного класса и использовать процедуру регистрации, а она точно не static.
Я еще читал про tlbimp. Но как бы не пытался вбить в командной строке, она выдавала ошибку:
"tlbimp" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
Может есть еще какие варианты?


Цитата Сообщение от Usaga Посмотреть сообщение
EXE можно использовать как DLL, внутри они одинаково устроены.
Тогда получается тут ничего регистрировать не нужно. Просто когда я использовал библиотеку скомпилированную из подобной программы, мне приходилось регистрировать dll, и только потом VS давал её использовать.
0
Эксперт .NET
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,601
28.07.2017, 12:04 6
Цитата Сообщение от Hockmoon911 Посмотреть сообщение
Так как самое первое что нужно сделать это создать объект основного класса и использовать процедуру регистрации
Эм. А завести отдельный класс-обёртку со статичным методами и использовать его в объекте основного класса невозможно по религиозным соображениям?
0
0 / 0 / 1
Регистрация: 28.03.2015
Сообщений: 59
28.07.2017, 12:07  [ТС] 7
Цитата Сообщение от Usaga Посмотреть сообщение
Эм. А завести отдельный класс-обёртку со статичным методами и использовать его в объекте основного класса невозможно по религиозным соображениям?
Прошу прощения, не знаком с таким подходом, пошел гуглить.
0
Эксперт .NET
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,601
28.07.2017, 12:10 8
Hockmoon911,

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    static class ApiWrapper
    {
        [DllImport(БЛА-БЛА-БЛА)]
        public static extern void SomeAPIVoidMethod();
 
        [DllImport(БЛА-БЛА-БЛА)]
        public static extern int SomeOtherAPIIntMethod();
    }
 
    class SomeClass
    {
        public void SomeMethod()
        {
            ApiWrapper.SomeAPIVoidMethod();
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            SomeClass sc = new SomeClass();
            sc.SomeMethod();
 
            Console.ReadKey();
        }
    }
1
0 / 0 / 1
Регистрация: 28.03.2015
Сообщений: 59
28.07.2017, 12:22  [ТС] 9
Usaga, я имел в виду что нужно вызвать из exe метод Login и он не статик.
0
Эксперт .NET
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,601
28.07.2017, 12:34 10
Hockmoon911, в C# вы можете импортировать только функции.
0
0 / 0 / 1
Регистрация: 28.03.2015
Сообщений: 59
28.07.2017, 12:39  [ТС] 11
Чувствую себя идиотом
Цитата Сообщение от Usaga Посмотреть сообщение
EXE можно использовать как DLL, внутри они одинаково устроены.
Но спасибо. В итоге вот эта фраза и текст в документации на API "В других языках программирования надо аналогично подключить COM-библиотеку которая находится в исполняемом файле s4.exe." меня зацепила и я прикинул, почему бы не прописать в ссылках проекта в VS сам exe и не сделать using))
Вроде получается.

Но тут еще два вопроса возникает):
1). При таком подходе не оказывает ли это нагрузки на программу к которой подцепляюсь и не возникнет ли конфликта если я запущу самописное приложение и саму программу одновременно.
2). Когда допишу программу и буду использовать её на другом ПК где эта программа стоит, и даже путь к exe такой же и скорее всего в реестре все одинаково. Тут все отработает нормально?
0
Эксперт .NET
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,601
28.07.2017, 12:42 12
Hockmoon911, если речь о COM-сервере, то нагрузки вы не создадите. Это приложение для этого проектировалось.

Ссылку на COM вы как сделали? Просто EXE-шник, что ли выбрали?
0
0 / 0 / 1
Регистрация: 28.03.2015
Сообщений: 59
28.07.2017, 13:12  [ТС] 13
Цитата Сообщение от Usaga Посмотреть сообщение
Ссылку на COM вы как сделали? Просто EXE-шник, что ли выбрали?
Да)) покрайней мере при добавлении в using VS подсказал что такая есть.

Не правильно чтоли?

Добавлено через 27 минут
Цитата Сообщение от Usaga Посмотреть сообщение
Hockmoon911, если речь о COM-сервере, то нагрузки вы не создадите. Это приложение для этого проектировалось.

Ссылку на COM вы как сделали? Просто EXE-шник, что ли выбрали?
Вообще если полностью, то в документации написано так:
В общем случае порядок работы с функциями Search API следующий:

1. Зарегистрируйте Search COM Server на Вашем компьютере. Для этого нужно хотя бы один раз запустить файл s4.exe.

2. Подключите к тексту Вашей программы модуль с описанием функций Search API. В Delphi этот модуль можно сгенерировать с помощью команды меню Project/Import type library - в появившемся окне надо найти библиотеку "S4 Library" и нажать кнопку "Create unit". В других языках программирования надо аналогично подключить COM-библиотеку которая находится в исполняемом файле s4.exe.

Пример: uses S4_TLB;

3. Объявите глобальную переменную типа ITS4App. Не используйте для этой цели локальные переменные в Ваших функциях, поскольку локальные переменные уничтожаются после завершения самих функций, что приведет к постоянной загрузке и выгрузке Search.
0
Эксперт .NET
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,601
28.07.2017, 16:48 14
Можно и так.
0
28.07.2017, 16:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.07.2017, 16:48
Помогаю со студенческими работами здесь

Директива import (Как работает import?)
Например есть 2 модуля. В первом модуле import pygame и далее работаем с окном. Во втором модуле...

про библиотеки в VS C++ (какие библиотеки нужны для функций 'cout' и 'cin')
какие библиотеки нужны для функций 'cout' и 'cin' ???

Как посмотреть какие библиотеки тянут другие библиотеки процесса
Привет, есть процесс, у него подтянуты dll'ки список которых я могу просматривать прогой Process...

Подключение библиотеки Crypto. Если возможно, нужна ссылка на скачивание данной библиотеки
Возникли сложности с подключением библиотеки Crypto: import Crypto.Cipher.AES Выдает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru