Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.03.2012, 13:11   #1
penb
 
Регистрация: 12.05.2009
Сообщений: 5
Вопрос Error 424 - Object required, при вызове процедуры из DLL

Приветствую!
Я пытаюсь вызвать процедуру из VB ActiveX dll, но появляется Error 424 "Object required"

Мой код:
Код:
Dim X As Object
Set X = New template20.MyClass
Call X.DrawVertical1(verticalArr1, LayNum1)
template20 - моя dll, прикреплённая в References
MyClass - класс в template20
Drawvertical1 - процедура в template20.Myclass

Что может быть не так?
penb вне форума Ответить с цитированием
Старый 21.03.2012, 14:02   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

На какой строке ошибка?

Если в коде оставить только эту строку - тоже ошибка будет?
Код:
Set X = New template20.MyClass
EducatedFool вне форума Ответить с цитированием
Старый 21.03.2012, 14:33   #3
penb
 
Регистрация: 12.05.2009
Сообщений: 5
По умолчанию

Спасибо за ответ!
Несколько минут назад я уже разобрался этим, когда понял, как делать debug в Dll.
Расскажу для будущих поколений: надо в references Vba проекта отключить dll, потом в VB проекте запустить Run->Start With Full Complie, затем в references VBA проекта через browse подключить файл VB проекта. Тогда Debug можно будет производить сразу в двух средах.

Дополнительный вопрос по горячим следам:
DLL не может распознать объект UserForm1 из VBA проекта. Правильно ли я понимаю, что прямое обращение к конкретному объекту из DLL невозможно и надо объект передавать в качестве параметра процедуры?
Спасибо!
penb вне форума Ответить с цитированием
Старый 21.03.2012, 20:26   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Правильно ли я понимаю, что прямое обращение к конкретному объекту из DLL невозможно и надо объект передавать в качестве параметра процедуры?
Я не очень разбираюсь в этом вопросе, но думаю, что без передачи UserForm как параметра не обойтись
(иначе как DLL узнает, где искать эту форму)

Можно, конечно, параметром в DLL передать и книгу, и приложение Excel, - но код заметно усложнится.

Вообще, я бы на вашем месте не передавал бы UserForm в DLL
Управлять UserForm из DLL, как мне кажется, - задача достаточно трудоемкая.

Почему не написать весь код в UserForm?
Почему не добавить UserForm в состав DLL?
(я как-то однажды делал так DLL для прогресс-бара и типичных функций, чтобы использовать это в Excel, и код защитить. Потом раздумал - слишком много времени тратится на разработку в двух средах программирования)
EducatedFool вне форума Ответить с цитированием
Старый 21.03.2012, 21:18   #5
penb
 
Регистрация: 12.05.2009
Сообщений: 5
По умолчанию

Как оказалось, я всё усложнил, мне нужно было всего лишь получить Caption из TextBox, и я его передал через обычный строковый параметр)) Просто вышла небольшая паника.
Всё, все вопросы исчерпаны, спасибо!
penb вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при подключении к базе данных Object reference not set to an instance of an object. lowercase ASP.NET 1 20.11.2011 22:48
System error code 5 при вызове AssignProcessToJobObject Effort Общие вопросы Delphi 1 16.07.2011 00:25
Type Missmath при вызове процедуры находящейся в модуле. iBuTTHead Паскаль, Turbo Pascal, PascalABC.NET 0 11.12.2010 18:52
Record, object or class type required @mazonk@ Помощь студентам 0 07.06.2009 13:03
потеря параметров при вызове формы из dll... Roof Общие вопросы Delphi 4 22.08.2008 22:08