Подключения DLL написанной на С (возможно необычный вопрос)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
TrueTrue
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 167
Зарегистрирован: 20.05.2009 (Ср) 23:18

Подключения DLL написанной на С (возможно необычный вопрос)

Сообщение TrueTrue » 10.01.2015 (Сб) 15:17

Ув.Форумчане, есть вопрос или может просьба даже.

Вот здесь, по этому адресу:
http://sourceforge.net/projects/aoc-mgx ... yst%201.1/

в архиве, есть DLL написанная на С "recanalyst.dll"
Вот здесь, есть полное и подробное описание этой DLL
http://aoc-mgx-utils.sourceforge.net/recanalyst/

Эта DLL позволяет открывать и читать данные из файлов формата MGX

Мне очень необходимо, подключить и полноценно использовать эту DLL в своём проекте на VB6.

Я уже перепробовал вроде как все варианты, у меня никак не выходит, вызывать функции из неё.
Прошу помощи, подсказки или примеров...

З.Ы. Мне настолько необходимо решение данного вопроса, что за реальную помощь, готов даже заплатить.
Не в смысле как за работу, а в смысле благодарности.)) Надеюсь никого не обидел.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Подключения DLL написанной на С (возможно необычный вопр

Сообщение Хакер » 10.01.2015 (Сб) 15:34

Ну и где твой неработающий код, пытающийся вызвать функции?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

TrueTrue
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 167
Зарегистрирован: 20.05.2009 (Ср) 23:18

Re: Подключения DLL написанной на С (возможно необычный вопр

Сообщение TrueTrue » 10.01.2015 (Сб) 15:51

Если бы у меня был код, я бы его предоставил.

эта DLL не регистрируется в Win при помощи regsvr32
Не подгружается в VB6, его средствами.

Я попробовал её подключать типа так:
Код: Выделить всё
Private Declare Function LoadLibrary Lib "X:\Documents and Settings\Admin\Ðàáî÷èé ñòîë\Vbtest\AOE_RecAnalyst\recanalyst.dll" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long


Но не имею ни малейшего представления, как правильно построить эту строку...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Подключения DLL написанной на С (возможно необычный вопр

Сообщение Хакер » 10.01.2015 (Сб) 15:59

TrueTrue писал(а):эта DLL не регистрируется в Win при помощи regsvr32

Это логично, ведь если спрашивать кусок мыла о том, что будет с курсом доллара, то кусок мыла не ответит. Но это не значит, что что-то не так с куском мыла или тем более долларом. Это просто значит, что у спрашивающего странные и извращённые понятия о том, что делать с куском мыла. Это только в песнях ясень отвечает.

TrueTrue писал(а):Не подгружается в VB6, его средствами.

Это какими же?

TrueTrue писал(а):Private Declare Function LoadLibrary Lib "X:\Documents and Settings\Admin\Ðàáî÷èé ñòîë\Vbtest\AOE_RecAnalyst\recanalyst.dll" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long

Потому что это бред собачий. В твоей библиотеке не живёт функция LoadLibraryA, эта функция живёт в kernel32.dll.

TrueTrue писал(а):Но не имею ни малейшего представления, как правильно построить эту строку...

Ну так вот и проблема. Значит надо забыть временно о конкретной библиотеке и заняться изучением в общих чертах того, как устроены библиотеки, как они экспортируют функции, как их можно загружать, импортировать из них функции и так далее. А потом вернуться к своей библиотеке.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Подключения DLL написанной на С (возможно необычный вопр

Сообщение Хакер » 10.01.2015 (Сб) 16:03

Вопрос не необычный, а сверх-дилетантский.

В качестве затравки:
Код: Выделить всё
Private Declare Function recanalyst_libversion Lib "recanalyst.dll" () As String

Private Sub Form_Load()
    MsgBox "Версия: "+recanalyst_libversion()
End Sub


Дальше включай голову сам. Конкретные вопросы не возбраняются.
Ну и к сведению, способ с Declare — это не единственный способ.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

TrueTrue
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 167
Зарегистрирован: 20.05.2009 (Ср) 23:18

Re: Подключения DLL написанной на С (возможно необычный вопр

Сообщение TrueTrue » 10.01.2015 (Сб) 16:10

Ну так вот и проблема. Значит надо забыть временно о конкретной библиотеке и заняться изучением в общих чертах того, как устроены библиотеки, как они экспортируют функции, как их можно загружать, импортировать из них функции и так далее. А потом вернуться к своей библиотеке.


Не все хотят быть такими профессорами в области VB6 как Вы, у меня есть много других вопросов в жизни, на что я трачу своё время. Если хотите помочь, буду признателен, не хотите Ваше дело.

Если у Вас дома прорвало трубу? Вы становитесь сантехником? или Вызываете сантехника, что бы он пришёл и поумничал? я думаю нет. Так и я. Для меня VB6 это вспомогательная платформа, которая помогает решать мне по жизни некоторые вопросы. Спасибо за помощь.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Подключения DLL написанной на С (возможно необычный вопр

Сообщение Хакер » 10.01.2015 (Сб) 16:45

TrueTrue писал(а):Если хотите помочь, буду признателен

А разве я уже не сделал этого?

TrueTrue писал(а):Не все хотят быть такими профессорами в области VB6

Когда взбираешься к гору, часто в процессе кажется, что вершина-то уже очень близко, но добравшись до места, которое казалось вершиной, понимаешь, что это вовсе не вершина. Ты сейчас стоишь у подножья горы и уровень «профессора» тебе вряд ли действительно виден. Поэтому давай ты не будешь спорить, а просто примешь к сведению, окей? Тут бывают топики, где, чтобы разобраться, нужно действительно быть профессором VB6, но данный даже близко не относится к таковым. Потому что уровень вопроса, который поднимается в теме, относится к самым-самым начальным азам.

TrueTrue писал(а):Если у Вас дома прорвало трубу? Вы становитесь сантехником?

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

Ну и к тому же, раз уж ты взываешь к примерам с вызовом сантехника: сантехнику платят, заказывают у него исполнение работы. Этот раздел не для таких случаев. Этот раздел: это примерно как когда неопытные сантехники спрашивают совета у более опытных. А для заказа работы есть другой раздел.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Подключения DLL написанной на С (возможно необычный вопр

Сообщение ger_kar » 10.01.2015 (Сб) 18:21

Прочитал тему, просто невыразимо как захотелось вставить свои 5 копеек.
Заранее извиняюсь за офтопик.
Так вот если хочешь сварить борщ, то хочется того или нет, но придется начистить картошку, а еще нарезать овощей. Без этого борщ сварить, ну никак не получится. Так и тут. Можно конечно не становиться профессором в VB6 и изучать все нюансы и тонкости, но коли уж необходимо вызвать функцию из библиотеки, то тут охота или нет, но (хотя бы в общих чертах) изучить именно этот аспект придется, хотя бы просто для того, что-бы понимать, что ты делаешь. Вот такое лирическое отступление. Далее по теме:

Для того чтобы вызвать функцию либо процедуру из сторонней библиотеки нужно, чтобы эта функция поддерживала соглашение о вызове stdcall. Общие сведения об этом можно получить тут, в Википедии
Для объявления таких функций в VB6 существует конструкция Declare.
Код: Выделить всё
Declare Sub (или Function) [Наименование функции] Lib "[Наименование библиотеки]" Alias "[Наименование функции в библиотеке]" ([Агументы]) As [возвращаемый тип (только для функции)]


Например:
Код: Выделить всё
Public Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long )

  1. [Наименование функции] - Это наименование функции в коде, т.е. то название, которое даст программист и по которому он будет вызывать эту функцию. В приведенном примере в библиотеке функция называется "RtlMoveMemory", название скажем не очень запоминающееся, поэтому функция объявлена с именем CopyMemory, под которому далее и будет фигурировать в коде.
  2. [Наименование библиотеки] - Соответственно Наименование самой библиотеки. Если библиотека в одной папке с программой, либо же если она в системных каталогах, то можно указать только имя, если где-то, хер пойми где (для системы), то тогда указывается полный путь. Наименование библиотеки указывается в кавычках!
  3. [Наименование функции в библиотеке] - Имя функции, так как оно есть в библиотеке. Указывается в кавычках. Если объявленное наименование функции совпадает с библиотечным, то [Наименование функции в библиотеке] и ключевое слово Alias можно просто пропустить.
  4. Далее идет самое интересное - Аргументы! Их может не быть, тогда ничего кроме скобок указывать не нужно. Как в примере выше у Хакера. Но если они есть (необходимы для вызова функции) то тогда необходимо их все указать. В нужном количестве, порядке и нужного типа. Также необходимо указать каким образом они будут передаваться по ссылке - ByRef, либо по значению ByVal.
Бороться и искать, найти и перепрятать


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, SemrushBot, Yandex-бот и гости: 54

    TopList