Miguel Altamirano Morales Ответов: 2

Использование внешних функций 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, как мне посоветовал другой друг на этом портале.

Большое спасибо, и если у вас есть еще одно предложение, пожалуйста, дайте мне знать.

2 Ответов

Рейтинг:
2

Southmountain

взгляните на этот пост:

Create .lib file from .dll


Miguel Altamirano Morales

Большое вам спасибо, мой друг Саутмоунтен (такое милое имя).

Сообщение, которое вы прислали мне в своем втором решении, предназначено для достижения первого ?.

Я внимательно прочитаю то, что вы мне предложили.

Рейтинг:
1

Southmountain

Попробуйте:вы можете разобрать его,найти определения классов и методов, построить свой файл .def,а затем использовать его как другую обычную DLL.