Добрый день ув.Эксперты! Есть длл... она должна вернуть приложению на ВБ 4-е числа типа Long.... Посоветовали сделать так... передать аргумент, а асме писать OffSet или Addr и получить адрес памяти а не значение, потом просто пишешь в этот адрес что угодно.... Пробывал... не выходит.... предавал через ByRef... аналогично.. Если кто знает как это сделать (в смысле передать аргумент).... то пожалуйста с примером на ВБ... Может у кого есть наработки по этой теме.... буду признателен.. заранее спасибо
Доброе время суток, pAcU! В приложении функция на асме внутри библиотеки tool.dll и объявлена как Private Declare Sub addlongs Lib "tool" (ByRef number1 As Long, ByVal number2 As Long) Результат возвращает, как видно из примера, в первый операнд, т.е. на бейсике пришешь: a=5 b=6 addlongs(a, b) результат будет в а
Приложение: Ответ отправлен: 08.06.2003, 18:16 Отправитель: masquer Отвечает Licvidator
Здравствуйте, pAcU! Сразу скажу, что с dll я не работал. Однако, поискав в книге (Джон Кларк Крейг, Джефф Уэбб Visual Basic 6.0 Мастерская разработчика, издание пятое, Москва, 2001) эту тему, пришел к такому выводу (подразумевается, что все четыре значения берутся от одной ф-ии): *** Private Declare Function Test _ Lib "mydll.dll" ( _ ByRef a As Long _ ) As Long 'где 'a - переменная, объявленная в dll Dim lngA As Long Dim lngB As Long Dim lngC As Long Dim lngD As Long Dim lngE As Long 'Собственно вызов lngA=1' - исходное условие 1 lngB=Test(lngA) lngA=2' - исходное условие 2 lngC=Test(lngA) lngA=3' - исходное условие 3 lngD=Test(lngA) lngA=4' - исходное условие 4 lngE=Test(lngA) Print lngB, lngC, lngD, lngE *** А в С-файле, например, след. код: *** Long _stdcall Test(LONG
a) { return( a + a ); } *** Возможно, я где-то ошибся, т.к., повторюсь, подобным не занимался. Ответ отправлен: 08.06.2003, 18:51 Отправитель: Licvidator Отвечает USA-Lesh
Приветствую Вас, pAcU! В dll: Function ReturnArr() as Variant Dim Arg(3) As Long 'Здесь инициализация возвращаемого массива ReturnArr = Arg End Function В приложении: Dim Val As Variant Val = ReturnArr Это если все писать на VB, и dll и прогу. Есть догадка, что dll на ASM, тогда надо в ассемблерной рассылке уточнить. Удачи. Ответ отправлен: 09.06.2003, 03:48 Отправитель: USA-Lesh
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.