Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 18.12.2013
Сообщений: 2

Задекларировать функцию из query.dll

14.04.2011, 08:09. Показов 1296. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
С VB6 сталкивался не часто и вот напоролся на то что не пойму как задекларить функцию из query.dll
C++
1
2
3
STDAPI LoadIFilter( WCHAR const * pwcsPath,
                    IUnknown *    pUnkOuter, // на этот параметр пофигу он всегда NULL
                    void **       ppIUnk ); // это возвращаемая ссылка на созданный объект
попробовал вот так
Visual Basic
1
2
3
4
Public Declare Function LoadIFilter Lib 'query.dll' ( _
                    ByVal pwcsPath As String, _
                    ByRef pUnkOuter As Long, _
                    ByRef ppIUnk As Long) As Long
но функция вощвращает E_FAIL хотя аналогичто на с++ работает.
Скорее всего я неправильно задекларил строки или на указатели

Хелп ми плиз, ОЧЕНЬ НАДА!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.04.2011, 08:09
Ответы с готовыми решениями:

За какую функцию отвечают user32.dll,kernel32,winmm.dll
Помогите мне пожалуйста,разобратся с этими DLLками. Если есть где можно скачать матерьял,буду премного благодарен.

Как в VB.net задекларировать внешнюю dll
РЕбята, всем привет! Решил перейти с VBA на VS2010(Vb.net), возникают вопросы по синтаксису: В VBA мы пишем: Public Declare Function ABC...

Как правильно задекларировать функцию на Dev C++?
у меня windows xp.Делаю простую консольку на с,для вывода графика функции на консоль.Сам графический режим работает. ...

7
5 / 5 / 0
Регистрация: 08.12.2009
Сообщений: 213
15.04.2011, 00:15
Не уверен, что помогу, но...
Я не видел такой декларации STDAPI, по крайней мере в VC.

Декларация должна содержать __stdcall (или WINAPI или APIENTRY, это одно и тоже)
т.е. в Си функция должна выглядеть так:
C++
1
2
3
DWORD WINAPI LoadIFilter( WCHAR const * pwcsPath,          
           IUnknown *  pUnkOuter, // на этот параметр пофигу он всегда NULL          
           void **    ppIUnk ); // это возвращаемая ссылка на созданный объект
(возвращаемое значение должно присутсвовать)

Что же касается декларации в VB, то она выглядит нормально, но я сам столкнулся с такой же проблемой (мой топик несколькими строками ниже).
Надеялся что спецы как Comanche, Kons_one, Messir и др. ответят, но пока не получил ответа. Будем ждать вместе.
0
Comanche
15.04.2011, 00:47
Я в Си - как свинья в апельсинах.
Так что на меня не надейтесь )
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
15.04.2011, 01:05
У меня предложение: описать первый параметр как
ByVal pwcsPath As Any
а при обращении писать
LoadIFilter(StrPtr('YourPath'), ...
0
Messir
15.04.2011, 16:45
Попробуй так:
Declare Function LoadIFilter lib 'query.dll' (ByVal pwscPath As String, pUnkOuter As Any, ppIUnk As Any) As Long
Messir
15.04.2011, 16:47
А по поводу строк - вероятно, оно хочет юникодовые строки. Делайте явное преобразование
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
15.04.2011, 21:13
Так ведь в бейсике строки и так юникодовые, так что и преобразования делать не надо. Вот я набросал следующий пример. Здесь API функция GetEnvironmentVariable существует в двух вариантах ансишном и юникодовом. Оба варианта могут быть вызваны из бейсика. Почувствуйте разницу.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Private Declare Function GEVA _
  Lib 'kernel32.dll' Alias 'GetEnvironmentVariableA' _
  (ByVal lpName As String, _
  ByVal lpBuffer As String, _
  ByVal lpBuffer As Long) As Long
Private Declare Function GEVW _
  Lib 'kernel32.dll' Alias 'GetEnvironmentVariableW' _
  (ByVal lpName As Any, _
  ByVal lpBuffer As Any, _
  ByVal lpBuffer As Long) As Long
 
Private Sub Form_Load()
  Dim s As String
  Dim v As String
  ' Определяем значение переменной окружения TEMP
  v = Space(250) ' выделяем память
  l = GEVA('temp', v, Len(v))
  v = Mid(v, 1, l) ' устанавливаем возвращенную длину
  MsgBox (v)
  ' а теперь то же самое но для юникода
  v = Space(250)
  l = GEVW(StrPtr('temp'), StrPtr(v), Len(v))
  MsgBox Len(v)
  v = Mid(v, 1, l)
  MsgBox (v)
End Sub
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
15.04.2011, 21:15
Имя для длины l выбрано неудачно, путается с цифрой 1, но работает правильно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.04.2011, 21:15
Помогаю со студенческими работами здесь

Передача Query из DLL в программу
Доброго времени суток ! Долго думал над вопросом,пытался его сформулировать гуглу,но так и не смог :( Возможно ли как-то передать...

DLL - как подменить функцию, используя самодельную DLL?
Очень прошу пособить, кому не трудно... . Проблема в целом не сложная: имеется сторонняя программа (только exe), которая при определенном...

Как задекларировать AppCreate
Добрый день, граждане. Извините за корявость вопроса, но я не профессионал, а компьютер с Delphi-проектом сейчас на даче. Поэтому пишу...

Shodanhq - ошибка Error: Invalid search query, please check the query syntax
Собственно, такая проблема. Я думаю, что многие знакомы с такой поисковой системой, как shodanhq.com. В последнее время при поиске у меня...

Не работает $db->query(); // Call to a member function Query() on a non-object in
Только приступил к ООП, поэтому очевидно наличие простых ошибок. Вот код, который при запуске метода $User->registr(); Выодает ошибку:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru