0 / 0 / 1
Регистрация: 28.03.2015
Сообщений: 59
|
|
1 | |
Import библиотеки28.07.2017, 05:59. Показов 3730. Ответов 13
Метки нет (Все метки)
Добрый день.
У меня на компьютере установлена программа, которая имеет набор API функций, но на сколько я понял эти API лежат не в отдельной dll а в самом exe. В Delphi есть штука project->ImportTypeLibrary, там я могу найти этот exe и импортировать все эту информацию в Delphi. Вот в чем вопрос, есть ли для C# подобная штука? На сколько знаю эти API могут использоваться на C#, C++, VB, Pascal. У меня есть подобная библиотека dll с API только другой программы и на C# у меня все нормально работает.
0
|
28.07.2017, 05:59 | |
Ответы с готовыми решениями:
13
Создание dll библиотеки в C#. Вызов классов этой библиотеки Не получается сделать import библиотеки #import библиотеки в зависимости от версии Excel Import Error: could not import module 'PySide.QtXml' |
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,601
|
|
28.07.2017, 06:40 | 2 |
Нет. В C# этого не требуется. Все импортируемые функции описываются в коде вручную с помощью атрибута DllImport. Погуглите по ключевым словам "DllImport", "P\Invoke". Посмотрите FAQ-ки на данном форуме.
0
|
0 / 0 / 1
Регистрация: 28.03.2015
Сообщений: 59
|
|
28.07.2017, 11:48 [ТС] | 3 |
Погуглил. В общем понял что это только я не нашел примеров с .exe, сработает - нет?
И в тех примерах что находил, там насколько понимаю вызывались только статик функции, а объект не получится создать?
0
|
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 |
Тогда это не совсем подходит. Так как самое первое что нужно сделать это создать объект основного класса и использовать процедуру регистрации, а она точно не static.
Я еще читал про tlbimp. Но как бы не пытался вбить в командной строке, она выдавала ошибку: "tlbimp" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. Может есть еще какие варианты? Тогда получается тут ничего регистрировать не нужно. Просто когда я использовал библиотеку скомпилированную из подобной программы, мне приходилось регистрировать dll, и только потом VS давал её использовать.
0
|
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,601
|
|
28.07.2017, 12:04 | 6 |
Эм. А завести отдельный класс-обёртку со статичным методами и использовать его в объекте основного класса невозможно по религиозным соображениям?
0
|
0 / 0 / 1
Регистрация: 28.03.2015
Сообщений: 59
|
|
28.07.2017, 12:07 [ТС] | 7 |
0
|
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,601
|
||||||
28.07.2017, 12:10 | 8 | |||||
Hockmoon911,
1
|
0 / 0 / 1
Регистрация: 28.03.2015
Сообщений: 59
|
|
28.07.2017, 12:22 [ТС] | 9 |
Usaga, я имел в виду что нужно вызвать из exe метод Login и он не статик.
0
|
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 |
Чувствую себя идиотом
Но спасибо. В итоге вот эта фраза и текст в документации на API "В других языках программирования надо аналогично подключить COM-библиотеку которая находится в исполняемом файле s4.exe." меня зацепила и я прикинул, почему бы не прописать в ссылках проекта в VS сам exe и не сделать using)) Вроде получается. Но тут еще два вопроса возникает): 1). При таком подходе не оказывает ли это нагрузки на программу к которой подцепляюсь и не возникнет ли конфликта если я запущу самописное приложение и саму программу одновременно. 2). Когда допишу программу и буду использовать её на другом ПК где эта программа стоит, и даже путь к exe такой же и скорее всего в реестре все одинаково. Тут все отработает нормально?
0
|
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 |
Да)) покрайней мере при добавлении в using VS подсказал что такая есть.
Не правильно чтоли? Добавлено через 27 минут Вообще если полностью, то в документации написано так: В общем случае порядок работы с функциями 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
|
12081 / 8389 / 1282
Регистрация: 21.01.2016
Сообщений: 31,601
|
|
28.07.2017, 16:48 | 14 |
Можно и так.
0
|
28.07.2017, 16:48 | |
28.07.2017, 16:48 | |
Помогаю со студенческими работами здесь
14
Директива import (Как работает import?) про библиотеки в VS C++ (какие библиотеки нужны для функций 'cout' и 'cin') Как посмотреть какие библиотеки тянут другие библиотеки процесса Подключение библиотеки Crypto. Если возможно, нужна ссылка на скачивание данной библиотеки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |