Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/57: Рейтинг темы: голосов - 57, средняя оценка - 4.89
19 / 19 / 3
Регистрация: 08.11.2010
Сообщений: 78

Подключение библиотеки

08.11.2010, 13:28. Показов 10814. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите решить проблему с подключением библиотеки.
Нужно подключить библиотеку myDrumlib.dll в программу на c# и выполнить одну функцию. По описанию к библиотеке я предположил, что она написана на с++. Теперь порядок моих действий:
1. в solution explorer выбираю add reference и добавляю dll файл, в коде добавляю using myDrumlib. Теперь если набрать myDrumlib.Drum. среда выводит подсказку какие функции в библиотеке есть. Но при выполнении кода выводится ошибка: "Could not load file or assembly 'myDrumlib.dll' or one of its dependencies.Приложение не было запущено, поскольку оно некорректно настроено. Повторная установка приложения может решить данную проблему. (Exception from HRESULT: 0x800736B1)"."FileLoadException was unhandled"
2. поискал похожие вопросы, решил попробовать импортировать библиотеку:
using System.Runtime.InteropServices;
[DllImport("myDrumlib.dll")]
public static extern bool StartMeasure();
выдает ошибку
"Unable to load DLL 'myDrumlib.dll': Приложение не было запущено, поскольку оно некорректно настроено."."DllNotFoundException was unhandled"
Программирую в c# совсем чуть-чуть, поэтому могу не знать простейших вещей. Заранее спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.11.2010, 13:28
Ответы с готовыми решениями:

Подключение библиотеки, написанной на C++
Здравствуйте. Пытаюсь подключить свою dll.dll написанную на С++. Подключаю на C#. Это читал: ...

Ошибка подключение библиотеки
пытаюсь прикрутить monotorrent там один файл .dll бросаю его в корень проекта где все исходники. делаю ссылку в solution explorer ...

Подключение С/С++ библиотеки к проекту на C#
Помогите новичку подключить С/С++ библиотеку к проекту на C# Проблема: - есть DLL написанная на C/C++ - в ней описана вот такие...

19
Padawan
 Аватар для Johnny_D
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,841
08.11.2010, 13:56
Когда пишешь DLLImport, библу нужно положить в ту же директорию, где и находится exe файл приложения.
0
19 / 19 / 3
Регистрация: 08.11.2010
Сообщений: 78
08.11.2010, 14:07  [ТС]
Я знаю, она там и находится, я для надежности записал ее туда, куда только можно, даже в system32.
Не знаю, может быть это поможет решить проблему:
Для работы с этой библиотекой раньше использовалась другая программа, написанная на с++. Пробовал ее запустить на разных компьютерах - запускается, выполняется даже там, где нет .NET framework. А вот на моем при запуске выдает ошибку .NET framework initialization error. unable to find a version of the runtime to run this application. Стоит 4.
Попробовал открыть исходники этой программы и при выполнении он мне опять показал фигу в виде FileLoadException was unhandled. Как я понимаю что-то надо явно переустановить, но что именно?
0
Padawan
 Аватар для Johnny_D
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,841
08.11.2010, 14:14
Добавлено через 51 секунду
Цитата Сообщение от Ranvasrog Посмотреть сообщение
.NET framework initialization error. unable to find a version of the runtime to run this application.
поставь .net frwk
0
61 / 60 / 10
Регистрация: 11.08.2010
Сообщений: 199
08.11.2010, 14:40
Ranvasrog, если у вас библиотека написана на С++ (на unmanaged C++, а не С++.NET), то чтобы использовать оттуда какой-нибудь метод:
  1. Этот метод в библиотеке должен быть объявлен в блоке extern "C" с директивой __declspec(dllexport)
    например так:
    C++
    1
    2
    3
    4
    5
    6
    7
    
    extern "C"
    {
         __declspec(dllexport) void SomeMethod(char* arr, int lenght, char entropy)
        {
            //do something
        }
    }
  2. Прототип этого метода на C# должен быть объявлен с атрибутом DllImport и указан правильный прототип метода:
    C#
    1
    2
    3
    4
    
    using System.Runtime.InteropServices;
    ........................................................
    [DllImport("Decoder.dll")]
    public static extern void SomeMethod(byte[] source, Int32 lenght, byte entropy);
  3. Библиотека С++ должна лежать в одной папке c исполняемым файлом C#, референсов через студию добавлять не надо
1
19 / 19 / 3
Регистрация: 08.11.2010
Сообщений: 78
08.11.2010, 15:10  [ТС]
поставь .net frwk
Стоит 4 .NET frwk.
_Sergei_, я все так и делаю, как вы сказали. Пишет "Unable to load DLL Не найден указанный модуль."
А как узнать, что в библиотеке этот метод объявлен именно так, как вы сказали? И если он так не объявлен я не смогу использовать библиотеку на c#?
0
36 / 36 / 2
Регистрация: 08.11.2010
Сообщений: 119
08.11.2010, 15:12
Чтобы использовать функцию, нужно же знать ее сигнатуру и имя!как по-другому то?
0
19 / 19 / 3
Регистрация: 08.11.2010
Сообщений: 78
08.11.2010, 15:23  [ТС]
LilLoco, сигнатуру функции я знаю. Она есть в сопроводительном файле. Сигнатура, кстати, включает в себя имя
0
61 / 60 / 10
Регистрация: 11.08.2010
Сообщений: 199
08.11.2010, 16:15
Ну вот когда я удалил свою библиотеку на С++ из папки где находится исполняемый файл на C# получил ошибку "Unable to load DLL 'Decoder.dll': Не найден указанный модуль. (Exception from HRESULT: 0x8007007E)" Видимо вы все-таки что-то не туда размещаете и приложение не видит библиотеки.
Библиотека должна быть по <путь к проекту>\bin\debug\библиотека.dll (это если у вас debug по умолчанию стоит)
0
19 / 19 / 3
Регистрация: 08.11.2010
Сообщений: 78
08.11.2010, 19:10  [ТС]
К сожалению, библиотека находится в нужной папке и название я копировал копипастом. Уже всю голову сломал. Подозреваю во всем виной конфликт 4 .Net framework и библиотеки если такое вообще возможно. Завтра попробую поговорить с человеком, который мне это прислал, может что-нибудь проясню
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
08.11.2010, 19:23
Ranvasrog, можете DLL выложить?
1
19 / 19 / 3
Регистрация: 08.11.2010
Сообщений: 78
08.11.2010, 22:15  [ТС]
в ходе тестирования выяснилось, что кривая dll
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
08.11.2010, 22:22
Ну Вы бы хоть DLL сюда выложили, а то народ не поймет. Может ещё кто, что-нибудь интересное выскажет
0
19 / 19 / 3
Регистрация: 08.11.2010
Сообщений: 78
09.11.2010, 10:11  [ТС]
SSTREGG, не, если я ее выложу в общий доступ меня кто-то повесит Еще раз спасибо.
А, чем вы, если не секрет, смотрели начинку dll?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
09.11.2010, 18:01
Рефлектор.
1
19 / 19 / 3
Регистрация: 08.11.2010
Сообщений: 78
12.11.2010, 18:06  [ТС]
В общем, наверное, докопался я до сути. Библиотека написана под dotnet. Но для своего правильного функционирования она использует функции и процедуры из другой библиотеки, которая на unmanaged C++. Что можно с этим поделать? Пробую подключить все используемые в ней функции через pinvoke, примерно таким образом:
C#
1
2
3
4
5
6
7
8
9
10
[DllImport("somelibrary.DLL",EntryPoint = "Some_Procedure")]
public static extern System.IntPtr Some_Procedure(
        System.String lpszName, 
        System.UInt32 dwAccess,
    System.UInt32 dwShareMode,
        System.IntPtr lpSecurityAttributes,
    System.UInt32 dwCreate,
    System.UInt32 dwAttrsAndFlags,
        System.IntPtr hTemplate
        );
но эффекту 0
Пока все процедуры неуправляемой библиотеки, которые используются управляемой, я подключил. Структуры пока только не описал. Ошибка до сих пор та же.
0
 Аватар для sigmov
585 / 372 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
12.11.2010, 18:32
Цитата Сообщение от Ranvasrog Посмотреть сообщение
В общем, наверное, докопался я до сути. Библиотека написана под dotnet. Но для своего правильного функционирования она использует функции и процедуры из другой библиотеки, которая на unmanaged C++. Что можно с этим поделать? Пробую подключить все используемые в ней функции через pinvoke, примерно таким образом:
Если она написана под dotnet, то тогда непонятен зачем вы вообще pinvoke мастрячите? - Она должна подгрузиться как сборка через ReferenceAssembly.
Через pinvoke подключаются только неуправляемые функции....

То что в самой сборке дергаются ф-ии из unmanaged dll означает лишь то, что нужно эту unmanaged dll'ку закинуть в PATH проекта.

Вы вообще определяете, с чем работаете? dll сборка или dll native?
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
12.11.2010, 18:45
sigmov, основная DLL написана на C++, обертка над ней на C++\CLI.
Цитата Сообщение от sigmov Посмотреть сообщение
Через pinvoke подключаются только неуправляемые функции....
Не соглашусь. В .NET тоже можно экспортировать функции, но конечно не стандартными методами
Ranvasrog, попробуй работать сразу с native dll.
0
 Аватар для sigmov
585 / 372 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
12.11.2010, 19:12
Цитата Сообщение от SSTREGG Посмотреть сообщение
sigmov, основная DLL написана на C++, обертка над ней на C++\CLI.
Понятно. Видимо я это упустил. СПС.
Не соглашусь. В .NET тоже можно экспортировать функции, но конечно не стандартными методами
Знаю. Даже делал это через IL(Кстати весьма интересно, почему же в C# не предусмотрели для этого какого-либо механизма, скажем через атрибут DllExport....) добавлением .export[n]
Но делать для управлемой функции точку входа чтобы использовать ее опять же из NET через PInvoke это юмор чистой пробы ))))
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
12.11.2010, 19:15
Цитата Сообщение от sigmov Посмотреть сообщение
Знаю. Даже делал это через IL(Кстати весьма интересно, почему же в C# не предусмотрели для этого какого-либо механизма, скажем через атрибут DllExport....) добавлением .export[n]
Но делать для управлемой функции точку входа чтобы использовать ее опять же из NET через PInvoke это юмор чистой пробы ))))
Согласен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.11.2010, 19:15
Помогаю со студенческими работами здесь

Подключение библиотеки dll (c++) к проекту на c#
Как подключить библиотеку dll написанную на c++ к проекту на c#? Добавлено через 5 минут Если подключать через ссылку (добавив...

Подключение внешней библиотеки программно
При подключении библиотеки использую этот код Assembly extLibrary = Assembly.Load(new AssemblyName(&quot;RssGadget&quot;)); но если...

Подключение библиотеки lame_enc.dll
Для очередного моего проекта мне необходимо провести конвертацию по схеме: mp3 -&gt; wav -&gt; mp3 mp3 -&gt; wav конвертируется NAudio, а...

Подключение dll библиотеки к стороннему приложению
Добрый день! В общем присутствует некое приложение(исходников от него нету), и к нему нужно приаттачить некую самописную dll библиотеку,...

VK API подключение библиотеки и пример использования
Здравствуйте, скажите, пожалуйста как подключить vk api. Откуда брать библиотеку? Как подключить браузер? И, если не сложно, можно...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru