Использование внешних функций DLL в программе visual studio 2017
Всем добрый вечер.
Недавно я отказался от попыток использовать внешние функции dll в старом приложении Access 2010, оно просто никогда не работало; поэтому я пытаюсь использовать новый проект (программу), который я разрабатываю как настольное приложение с VS 2017 и VB NET, чтобы использовать его в качестве прокси-сервера для использования функций этой dll и возврата результатов в приложение Access 2010.
Программа в VS 2017 действительно распознает dll, ее атрибуты и функции.
Я уже подключил два приложения, отправляя туда и обратно необходимые параметры через буфер обмена, и даже назначил значения нескольким его атрибутам. Но когда я пытаюсь выполнить публичную функцию, программа терпит неудачу, и окно вывода отладки (я правильно говорю hpe) выдает мне сообщение (испанский язык):
'Facturacion_Electronica.exe' (CLR v4.0.30319: Facturacion_Electronica.exe): 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\FacturacionElectronica\v4.0_1.0.0.0__d18e1c28d757c7cd\FacturacionElectronica.dll' cargado. No se encuentra el archivo PDB o no se puede abrir.
Excepción producida: 'System.IO.FileNotFoundException' ru Facturacion_Electronica.exe
El programa '[4416] Facturacion_Electronica.exe' terminó con código 0 (0x0).
Это означает что-то вроде. -Facturacion_Electronica.dll загружена. Файл PDB не может быть найден или открыт".
Если я использую оператор "on error resume next" (просто чтобы избежать остановки программы и проанализировать следующие функции, то ошибка будет (более или менее):
"публичная функция Boolean Grabar_Factura отсутствует или не может быть найдена 2
Я видел, что эта функция входит в другую библиотеку dll, которая, вероятно, упоминается в первой (или вызывается из нее), и я действительно могу видеть эту функцию с помощью обозревателя объектов. Он действительно существует, поэтому я просто не знаю и не могу понять, почему он не найден в программе.
Я был бы очень признателен за любую помощь, указания или подсказки о том, где искать информацию для решения этой проблемы. Если я не могу этого достичь, то единственный вариант, который у меня остался, - это разработать эту функциональность самостоятельно, и это займет у меня много времени. Все дело в создании электронных счетов-фактур.
Что я уже пробовал:
Я пытался решить эту проблему, искал в интернете в течение долгого времени. Я понимаю, что мне нужно продолжать поиски, но мне бы очень хотелось сэкономить время.
phil.o
Мало вопросов :)
- Это внешняя библиотека dll, какого она типа? Библиотека DLL .NET или c/c++?
- Можете ли вы показать точное сообщение об ошибке, которое вы получаете?
Пожалуйста, используйте зеленый виджет "улучшить вопрос", чтобы добавить детали.
Miguel Altamirano Morales
Большое спасибо за ваш ответ, Фил. Я обновил свой вопрос, как вы мне предложили.
Второе сообщение об ошибке появляется только в том случае, если я установил оператор "on error resume next" в своей процедуре и не совсем так, как я его написал, но идея та же. Если я не использую оператор "on error....", программа останавливается с первой ошибкой.
Я думаю, что, возможно, решив первую ошибку, последующую можно было бы организовать автоматически.
Miguel Altamirano Morales
библиотека dll является чистой
Dotnet_Dotnet
сэр библиотека dll управляется кодируется или неуправляется
Miguel Altamirano Morales
Dotnet: Спасибо, что ответили. Извините, я этого не знаю. Я его не разрабатывал. Он был дан бывшим сотрудником,и у нас нет исходного кода.
Есть ли способ проверить это ?
Miguel Altamirano Morales
Она должна быть управляемой, насколько я читал.
Dotnet_Dotnet
скопируйте dll и поместите ее в свой каталог bin затем возьмите ссылку на dll в свой проект щелкнув правой кнопкой мыши в проводнике проектов
Dotnet_Dotnet
если код c#, то используйте dll, вызывая в верхней части страницы, например
использование System.Linq;
вы можете писать
через имя-DLL;
Miguel Altamirano Morales
Большое вам спасибо, дотнет.
Да, я уже сделал это, и моя программа (проект VB 2017) действительно распознает dll; на самом деле я могу присвоить значения нескольким ее атрибутам, но когда я пытаюсь выполнить внутреннюю публичную функцию, программа терпит неудачу, сообщая мне, что функция не может быть найдена.
Это странно, потому что я вижу функцию в Обозревателе объектов и в определении dll (или из-за большого невежества с моей стороны); я даже добавил ссылки на другие библиотеки DLL, которые, как мне кажется, могут быть связаны друг с другом.
Когда программа прерывается, выходное окно отладки сообщает, что a .Файл PDB не удалось найти, поэтому я также скопировал все соответствующие PDB в библиотеки DLL, которые я пытаюсь использовать в папке bin\debug.
Тем временем я начинаю разрабатывать новый проект, пытаясь эмулировать функциональность, которую я ожидал в dll. А также я собираюсь изучить p/invoke, как мне посоветовал другой друг на этом портале.
Большое спасибо, и если у вас есть еще одно предложение, пожалуйста, дайте мне знать.