19 / 19 / 3
Регистрация: 08.11.2010
Сообщений: 78
|
|
1 | |
Подключение библиотеки08.11.2010, 13:28. Показов 10393. Ответов 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
|
08.11.2010, 13:28 | |
Ответы с готовыми решениями:
19
Подключение библиотеки, написанной на C++ Ошибка подключение библиотеки Подключение С/С++ библиотеки к проекту на C# Подключение библиотеки dll (c++) к проекту на c# |
Padawan
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,841
|
|
08.11.2010, 13:56 | 2 |
Когда пишешь DLLImport, библу нужно положить в ту же директорию, где и находится exe файл приложения.
0
|
19 / 19 / 3
Регистрация: 08.11.2010
Сообщений: 78
|
|
08.11.2010, 14:07 [ТС] | 3 |
Я знаю, она там и находится, я для надежности записал ее туда, куда только можно, даже в 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
473 / 323 / 30
Регистрация: 30.01.2010
Сообщений: 1,841
|
|
08.11.2010, 14:14 | 4 |
0
|
61 / 60 / 10
Регистрация: 11.08.2010
Сообщений: 199
|
|||||||||||
08.11.2010, 14:40 | 5 | ||||||||||
Ranvasrog, если у вас библиотека написана на С++ (на unmanaged C++, а не С++.NET), то чтобы использовать оттуда какой-нибудь метод:
1
|
19 / 19 / 3
Регистрация: 08.11.2010
Сообщений: 78
|
|
08.11.2010, 15:10 [ТС] | 6 |
_Sergei_, я все так и делаю, как вы сказали. Пишет "Unable to load DLL Не найден указанный модуль." А как узнать, что в библиотеке этот метод объявлен именно так, как вы сказали? И если он так не объявлен я не смогу использовать библиотеку на c#?
0
|
36 / 36 / 2
Регистрация: 08.11.2010
Сообщений: 119
|
|
08.11.2010, 15:12 | 7 |
Чтобы использовать функцию, нужно же знать ее сигнатуру и имя!как по-другому то?
0
|
19 / 19 / 3
Регистрация: 08.11.2010
Сообщений: 78
|
|
08.11.2010, 15:23 [ТС] | 8 |
LilLoco, сигнатуру функции я знаю. Она есть в сопроводительном файле. Сигнатура, кстати, включает в себя имя
0
|
61 / 60 / 10
Регистрация: 11.08.2010
Сообщений: 199
|
|
08.11.2010, 16:15 | 9 |
Ну вот когда я удалил свою библиотеку на С++ из папки где находится исполняемый файл на 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 [ТС] | 10 |
К сожалению, библиотека находится в нужной папке и название я копировал копипастом. Уже всю голову сломал. Подозреваю во всем виной конфликт 4 .Net framework и библиотеки если такое вообще возможно. Завтра попробую поговорить с человеком, который мне это прислал, может что-нибудь проясню
0
|
19 / 19 / 3
Регистрация: 08.11.2010
Сообщений: 78
|
|
08.11.2010, 22:15 [ТС] | 12 |
в ходе тестирования выяснилось, что кривая dll
0
|
19 / 19 / 3
Регистрация: 08.11.2010
Сообщений: 78
|
|
09.11.2010, 10:11 [ТС] | 14 |
SSTREGG, не, если я ее выложу в общий доступ меня кто-то повесит Еще раз спасибо.
А, чем вы, если не секрет, смотрели начинку dll?
0
|
19 / 19 / 3
Регистрация: 08.11.2010
Сообщений: 78
|
||||||
12.11.2010, 18:06 [ТС] | 16 | |||||
В общем, наверное, докопался я до сути. Библиотека написана под dotnet. Но для своего правильного функционирования она использует функции и процедуры из другой библиотеки, которая на unmanaged C++. Что можно с этим поделать? Пробую подключить все используемые в ней функции через pinvoke, примерно таким образом:
Пока все процедуры неуправляемой библиотеки, которые используются управляемой, я подключил. Структуры пока только не описал. Ошибка до сих пор та же.
0
|
12.11.2010, 18:32 | 17 |
Если она написана под dotnet, то тогда непонятен зачем вы вообще pinvoke мастрячите? - Она должна подгрузиться как сборка через ReferenceAssembly.
Через pinvoke подключаются только неуправляемые функции.... То что в самой сборке дергаются ф-ии из unmanaged dll означает лишь то, что нужно эту unmanaged dll'ку закинуть в PATH проекта. Вы вообще определяете, с чем работаете? dll сборка или dll native?
0
|
Почетный модератор
|
|
12.11.2010, 18:45 | 18 |
sigmov, основная DLL написана на C++, обертка над ней на C++\CLI.
Не соглашусь. В .NET тоже можно экспортировать функции, но конечно не стандартными методами Ranvasrog, попробуй работать сразу с native dll.
0
|
12.11.2010, 19:12 | 19 |
Понятно. Видимо я это упустил. СПС.
Но делать для управлемой функции точку входа чтобы использовать ее опять же из NET через PInvoke это юмор чистой пробы ))))
0
|
Почетный модератор
|
|
12.11.2010, 19:15 | 20 |
0
|
12.11.2010, 19:15 | |
12.11.2010, 19:15 | |
Помогаю со студенческими работами здесь
20
Подключение внешней библиотеки программно Подключение библиотеки lame_enc.dll Подключение dll библиотеки к стороннему приложению VK API подключение библиотеки и пример использования Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |