Форум программистов, компьютерный форум, киберфорум
Pure Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.81/26: Рейтинг темы: голосов - 26, средняя оценка - 4.81
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707

Использование библиотеки dll написанной в Visual Basic

09.12.2014, 13:55. Показов 5446. Ответов 46
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Не получается использовать библиотеку написанную в VB.

Вот так вызываю функцию библиотеки:

PureBasic
1
2
3
4
5
6
7
8
9
Prototype.i CreateObject()
 
If OpenLibrary(0, "D:\mob\bb\testdll\TestDLL.dll")
      
  Asd.CreateObject = GetFunction(0, "CreateObjects")
  Asd()
  
  CloseLibrary(0)
EndIf
А это код самой библиотеки в VB:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Public obj As Object
 
Public Function CreateObjects() As Integer
    Set obj = CreateObject("Word.Application")
    obj.Visible = True
    CreateObjects = 1
End Function
 
Public Function WordOpen() As Boolean
    obj.Documents.open ("D:\mob\bb\1.docx")
    WordOpen = True
End Function
Добавлено через 1 минуту
На строке 6 PB выдает ошибку "невозможен доступ к памяти"
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.12.2014, 13:55
Ответы с готовыми решениями:

Обновление программы написанной на Visual Basic
Нужна помощь Вообщем смысл такой : По указанному адресу лежат файлы моей проги C\ProgramFiles\MB Так вот. Там находятся формы...

Чтение dll библиотеки написанной на C++ Builder 5 в C#
VS 2010. Казалось бы простой процесс чтения dll созданной в C++ Builder 5 выдаёт в C# неожиданности. Если вычислить при...

Использование библиотеки, написанной на ассемблере
Я написал библиотеку на ассемблере, которая складывает два числа. Загружаю ее в Delphi и использую функцию из библиотеки. Ввожу значения: 1...

46
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
09.12.2014, 22:15
Лучший ответ Сообщение было отмечено Randen как решение

Решение

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Pro_grammer Посмотреть сообщение
А если нужно быстродействие в каких то вопросах (хотя о чем я, офис это не 3D игра), то надо писать DLL на Пурике и использовать в VB6.
Я бы так не сказал.
Попробуй так создать DLL.
Randen, ты знаешь как делать позднее связывание на PB?

Добавлено через 13 минут
Randen, у тебя не инициализируется рантайм - это во-первых; во-вторых скинь приложение которое обращается к этой DLL. DLL сделай либо через FNDLL, либо тем способом что я описывал.
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
09.12.2014, 22:45  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Попробуй так создать DLL.
Так все работает.
Прекрасно, замечательно. Спасибо)

Добавлено через 5 минут
The trick, только вот не могу найти в статье инфу о том, где указываются имена экспортируемых функций

Добавлено через 1 минуту
Цитата Сообщение от The trick Посмотреть сообщение
Randen, ты знаешь как делать позднее связывание на PB?
Не знаю
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
09.12.2014, 22:45
Цитата Сообщение от Randen Посмотреть сообщение
The trick, только вот не могу найти в статье инфу о том, где указываются имена экспортируемых функций
Visual Basic
1
2
[VBCompiler]
LinkSwitches= /ENTRY:DllMain /EXPORT:Brightness /EXPORT:Contrast /EXPORT:Saturation /EXPORT:GaussianBlur /EXPORT:EdgeDetect /EXPORT:Sharpen /EXPORT:Emboss /EXPORT:Minimum /EXPORT:Maximum /EXPORT:FishEye
Читай внимательно прежде чем пользоваться.
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
09.12.2014, 22:46  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
DLL сделай либо через FNDLL, либо тем способом что я описывал.
__________________
FireNativeDll не работает на win7
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
09.12.2014, 22:47
Цитата Сообщение от Randen Посмотреть сообщение
FireNativeDll не работает на win7
Докажи. У меня все работает.
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
10.12.2014, 01:59  [ТС]
The trick, этот пример что вы указали сейчас
Попробуй так создать DLL.
работает.

А я читал на другом форуме о FireNativeDLL методе.
При его использовании библиотека просто не загружалась ни в PB ни через rundll32.
Там же вычитал, что оказывается, этот метод почему-то не работает на win7

Добавлено через 3 часа 8 минут
Почему-то если передавать параметр функции типа String, выдает ошибку.
Полагаю что строка не доходит до функции в библиотеке.
Visual Basic
1
2
3
4
5
Public Function DocumentOpen(Doc As Object, Pathes As String) As Integer
    Dim Path2 As String
    Path2 = "D:\mob\bb\1.docx"
    Doc.open FileName:=Path2
End Function
Вот таким образом всё нормально, но если открывать документ основываясь на содержимое строки Pathes выдает ошибку, хотя путь тот же самый.

PureBasic
1
CallFunction(0, "DocumentOpen", @doc, @"D:\mob\bb\1.docx")
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
10.12.2014, 07:12
Цитата Сообщение от Randen Посмотреть сообщение
Почему-то если передавать параметр функции типа String, выдает ошибку.
Потому что в VB6 строки типа BSTR.
1
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
10.12.2014, 07:13
Цитата Сообщение от The trick Посмотреть сообщение
Я бы так не сказал.
Ok. Тогда вопросы
1. Тогда в чем смысл для Пурика писать DLL с костылями на VB6? Особенно если учесть, что одно из достоинств Пурика это работа на всех версиях Винды без дополнительных библиотек и OCX. А DLL на VB6 сразу это достоинство уничтожает своим рантаймом.
2. Что такое можно написать на Пурике, чего невозможно на VB6 и почему весь проект не построить на VB6 опять же без лишних DLL?
0
Модератор
10060 / 3905 / 885
Регистрация: 22.02.2013
Сообщений: 5,854
Записей в блоге: 79
10.12.2014, 07:25
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Тогда в чем смысл для Пурика писать DLL с костылями на VB6?
Не знаю. Для ТС наверное легкая работа с ActiveX, хотя я на 100% уверен что и на PB можно тоже самое сделать без DLL - это я автору неоднократно говорил.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
Особенно если учесть, что одно из достоинств Пурика это работа на всех версиях Винды без дополнительных библиотек и OCX.
Хорошо, а какие дополнительные библиотеки требует программа на VB6?
Цитата Сообщение от Pro_grammer Посмотреть сообщение
А DLL на VB6 сразу это достоинство уничтожает своим рантаймом.
Никоим образом. Рантайм писутствует во всех виндах начиная с WIN2000.
Цитата Сообщение от Pro_grammer Посмотреть сообщение
2. Что такое можно написать на Пурике, чего невозможно на VB6 и почему весь проект не построить на VB6 опять же без лишних DLL?
Я этот вопрос ТС задавал (только наоборот чтобы написать без DLL, только на PB) в другой теме.
0
 Аватар для Pro_grammer
6807 / 2839 / 527
Регистрация: 24.04.2011
Сообщений: 5,308
Записей в блоге: 10
10.12.2014, 09:43
Цитата Сообщение от The trick Посмотреть сообщение
Хорошо, а какие дополнительные библиотеки требует программа на VB6?
Для написания программы, чуть более полезной чем "Hello world" нужно распространять с VB6 и регистрировать на клиентской машине различные компоненты, стандартных хватает только на примитивный интерфейс и функциональность.
Использование API, как равноценную возможность в обоих ЯП, я взаимно исключаю.
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
10.12.2014, 11:51  [ТС]
The trick, не очень понятно.
Пробовал на всякому. Не получается.

Попробую предположить, что надо создать участок памяти, в который вписать вначале длину строки, потом саму строку, а "Terminator" не понятно что такое
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,016
Записей в блоге: 7
10.12.2014, 12:13
Цитата Сообщение от The trick Посмотреть сообщение
Потому что в VB6 строки типа BSTR.
Тогда строку нужно преобразовать в этот формат.
PureBasic
1
2
3
4
5
6
7
8
9
Prototype.i CreateObject(*doc, String.p-bstr)
 
If OpenLibrary(0, "D:\mob\bb\testdll\TestDLL.dll")
      
  Asd.CreateObject = GetFunction(0, "DocumentOpen")
  Asd(@doc, "D:\mob\bb\1.docx")
  
  CloseLibrary(0)
EndIf
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
10.12.2014, 12:13  [ТС]
Нашел такую функцию
PureBasic
1
2
3
4
5
6
7
8
9
10
Procedure.l ansi2bstr(ansi.s)
  size.l=MultiByteToWideChar_(#CP_ACP,0,ansi,Len(ansi),0,0)
  Dim unicode.w(size)
  MultiByteToWideChar_(#CP_ACP, 0, ansi, Len(ansi), unicode(), size);#CP_ACP
  For i=0 To size
        tmp.s + Hex(unicode(i),#PB_Unicode)
        Next
  ;MessageRequester(Str(size), tmp )
  ProcedureReturn SysAllocString_(@unicode())
EndProcedure
А как передать, то что она возвращает не могу понять
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,016
Записей в блоге: 7
10.12.2014, 12:16
Цитата Сообщение от Randen Посмотреть сообщение
как передать, то что она возвращает
PureBasic
1
CallFunction(0, "DocumentOpen", @doc, ansi2bstr("D:\mob\bb\1.docx"))
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
10.12.2014, 12:18  [ТС]
locm, она возвращает не строку.
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,016
Записей в блоге: 7
10.12.2014, 12:21
И нужно не забывать освобождать память вызывая SysFreeString().

Добавлено через 2 минуты
Цитата Сообщение от Randen Посмотреть сообщение
она возвращает не строку
CallFunction принимает не строку, а указать на нее. Поэтому будет работать. Но проще сделать как в примере выше.
1
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
10.12.2014, 12:27  [ТС]
Вот так работает
PureBasic
1
2
3
  *All = ansi2bstr("D:\mob\bb\1.docx")
  
  result = cOpen(@Doc, @*All)
Добавлено через 3 минуты
Но не получается освободить память
PureBasic
1
SysFreeString_(*All)
Это не освобождает память, и не понятно что делает вообще
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,016
Записей в блоге: 7
10.12.2014, 12:32
Цитата Сообщение от Randen Посмотреть сообщение
Но не получается освободить память
Почему сделал такой вывод?
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Procedure.l ansi2bstr(ansi.s)
  size.l=MultiByteToWideChar_(#CP_ACP,0,ansi,Len(ansi),0,0)
  Dim unicode.w(size)
  MultiByteToWideChar_(#CP_ACP, 0, ansi, Len(ansi), unicode(), size)
  For i=0 To size
    tmp.s + Hex(unicode(i),#PB_Unicode)
  Next
  ProcedureReturn SysAllocString_(@unicode())
EndProcedure
 
Repeat
 *All = ansi2bstr("D:\mob\bb\1.docx")
 SysFreeString_(*All)
ForEver
Утечки памяти не наблюдается. А вот если закомментировать SysFreeString, память прилично течет.
0
35 / 35 / 15
Регистрация: 06.01.2014
Сообщений: 707
10.12.2014, 12:35  [ТС]
locm, я это определил по факту того, что после якобы освобождения, я могу получить данные
PureBasic
1
2
3
4
5
6
7
  *All = ansi2bstr("D:\mob\bb\1.docx")
  
  result = cOpen(@Doc, @*All)
  SysFreeString_(*All)
 
  
  Debug PeekS(*All)
0
Эксперт по электронике
6998 / 3314 / 341
Регистрация: 28.10.2011
Сообщений: 13,016
Записей в блоге: 7
10.12.2014, 12:39
При освобождении памяти, она помечается как свободная. Данные в ней не стираются, пока она не будет повторно использована.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.12.2014, 12:39

Использование библиотеки, написанной на Delphi
Здравствуйте, нужно написать длл библиотеку на делфи, и использовать ее в c#, не подскажите простой пример? Как ни делал по примерам из...

Подключение библиотеки DLL написанной на Си к проекту VB.NET
Мне нужен подробный пример написания библиотеки на Си и ее подключения к проекту VB.NET. Ссылку типа этой...

Чтение dll библиотеки написанной на C++ Builder 5 в Lazarus
Чтение dll библиотеки написанной на C++ Builder 5 в проекте Lazarus версии 2.0.4 с FPC 3.0.4 Возможно ли прочитать DLL библиотеку...

Использование DLL написанной на C#
В силу обстоятельств требуется использовать функцию из DLL, написанной на C#. Пишу простенький тест - и не работает. Подскажите,...

Вызов программой, написанной на С++, функции из dll, написанной на Assembler (явное подключение dll)
Доброго времени суток!Задали лабораторную работу: программа, написанная на с++ должна подключать dll, написанную на Assembler и вызывать...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
сукцессия 14. Обновленная схема модели
anaschu 28.06.2026
ГЛОБАЛЬНАЯ ОПИСАТЕЛЬНАЯ СПЕЦИФИКАЦИЯ ЭКОСИСТЕМНОЙ МОДЕЛИ «SOIL CHEMISTRY & MYCORRHIZA 2. 0» https:/ / ibb. co/ NnkGpfMd Представленная интегрированная схема описывает непрерывную нелинейную. . .
сукцессия 13. Питон модель трехзонного мицелия, пока что в основном арбускулярного
anaschu 28.06.2026
## Разработка агентной модели микоризной сукцессии: от выявления артефактов к созданию комплексной системы ### Аннотация Представлено исследование по разработке агентной модели микоризной. . .
сукцессия 12. краткий список проверок модели перед запуском.
anaschu 27.06.2026
Скрытые отказы в моделях систем динамики (SD-models) экологических систем: два случая из практики Контекст Разбирался прототип модели систем динамики (SD-модели) микоризной сукцессии: пять. . .
Сукцессия 11. Проверка орудий перед войной: разработка через тестирование
anaschu 27.06.2026
Как не дать модели соврать самой себе: проверки для симуляции микоризной сукцессии Введение Когда вы строите математическую модель живой системы — грибов, растений, почвы — главная опасность. . .
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru