Member 14152690 Ответов: 1

Получить функцию и возвращаемое значение библиотеки DLL


Я пытаюсь составить список win32 api для VB.NET-да. Я начал получать параметры процедур и по их префиксам (например, ByVal dwThing As Long -> ByVal dwThing As UInteger) переводить в VB.NET-да. На данный момент все в порядке (более или менее). Проблема возникает, когда мне нужно получить возвращаемое значение функций (я основываю свой проект на объявлениях API VB6, и этот язык не распознает неподписанные типы, и я не вижу float или double в файле). Затем я хочу получить имя функции и возвращаемое значение некоторых библиотек DLL (если это возможно с параметрами процедуры лучше, потому что я вижу реальное значение для них). Например,

BOOL Beep(DWORD dwFreq, DWORD dwDuration); (извлеченный из MSDN, это можно было бы получить с помощью kernel32.dll библиотека)

Это может быть сделано?

Заранее спасибо.

Что я уже пробовал:

Я уже пробовал с dumpbin.exe, но он не получает (или я не знаю, как это сделать) возвращаемые значения. Я только хочу, чтобы функции (с параметрами и возвращаемым значением) или подменю (с параметрами) сравнивали результаты и устанавливали их в список.

1 Ответов

Рейтинг:
10

Richard MacCutchan

VB6 был прекращен в прошлом веке. Переключиться на VB.NET и вы можете тогда использовать Вызов собственных DLL-библиотек из управляемого кода с использованием PInvoke | Майкрософт документы[^], который сделал всю работу за вас.


Member 14152690

Как я уже упоминал, я работаю в VB.NET-да. Дело в том, что я считаю, что API-интерфейсы windows все еще находятся на первом уровне, до .net. Поэтому я думаю, что инструкция ImportDLL заканчивается вызовом api. Я думаю, что он работает быстрее, чем .NET. При этом я не имею в виду, что .net не полезен.

Возвращаясь к предыдущему вопросу...

Можно ли извлечь функции и подпрограммы библиотеки dll с их параметрами и возвращаемыми значениями?

Еще раз заранее спасибо.

Richard MacCutchan

Согласно тексту вашего вопроса, Вы работаете в VB6. Если вы хотите получить полную информацию о каждой функции, перейдите по ссылке pinvoke.net: взаимодействия Вики![^].

Member 14152690

Нет, я сказал, что основываю свою работу на win32 api vb6. Но я перевожу на VB.NET. Тот с кем я работаю VB.NET.

Richard MacCutchan

VB6 не имеет win32 API, а Windows имеет. И если вы используете VB.NET тогда Pinvoke-это способ сделать это, как описано в ссылке, которую я дал вам изначально.

Member 14152690

Vb6 поставляется со списком windows api для работы. Единственное, что я хочу, это обновить этот список до VB.NET-да.

Richard MacCutchan

Не надо, вы просто окажетесь в беспорядке. Если вы пишете VB.NET приложения затем используют .Сетевые функции.

Member 14152690

Ну, пожалуйста, ответь мне на один вопрос. Является ли Windows API быстрее, чем .NET?

Richard MacCutchan

Невозможно ответить на такой вопрос, поскольку существует слишком много переменных, которые необходимо учитывать. Довольно легко написать приложение .NET, которое работает быстрее, чем аналогичное, написанное на C, но это ничего не доказывает.

Member 14152690

Хорошо, я докажу это. И извините меня за неудобства.

Richard MacCutchan

Это крайне маловероятно и совершенно неуместно.

Member 14152690

Извините за ответ. Я хотел сказать "проверить", а не доказать. В испанском языке это тот же глагол. Извините меня.

Richard MacCutchan

Зачем тратить время на упражнение, которое ничего не докажет? Вы можете использовать.Сетевые функции позволяют делать практически все, что вы хотите в программе. Если вам действительно нужен доступ к Win32 API, то, как я уже говорил, Вы можете использовать PInvoke.

Member 14152690

Это был недостаток моего английского. Я хотел сказать "попробуй", а не "докажи", оставив, конечно, в стороне win32 api. Что происходит, так это то, что в испанском языке "probar" может означать попробовать, доказать и т. д. И первым глаголом, пришедшим мне на ум, было "доказать". Опять же, извините меня недавно.

Richard MacCutchan

Пожалуйста, не извиняйтесь за любые проблемы с вашим английским языком. Я всегда восхищаюсь людьми из других стран, которые могут говорить о технических деталях на (что для них) иностранном языке.