Страница: 1 |
Страница: 1 |
Вопрос: Фигня с классом и Friend Sub
Добавлено: 17.11.05 23:33
Автор вопроса: Victor | Web-сайт:
Есть проект.
В нем есть класс интерфейса.
clsEffect.cls:
Friend Sub GetEffectDesc(ByRef IDName As String, _
ByRef MenuName As String)
End Sub
Дальше, имею его имплементацию.
clsLinColorStretch.cls:
Implements clsEffect
...
Friend Sub GetEffectDesc(ByRef IDName As String, _
ByRef MenuName As String)
MenuName = "Multiplication"
IDName = "Gamma"
End Sub
...
Далее, есть где-то в проекте:
Dim nEffects As Long
...
Public Function GetEffectByID(ByRef stID As String) As clsEffect
Dim EfID As String, EfMnu As String
Dim StIDU As String
Dim i As Long
StIDU = UCase$(stID)
For i = 0 To nEffects - 1
Effects(i).GetEffectDesc EfID, EfMnu
If UCase$(EfID) = UCase$(StIDU) Then
GetEffectByID = Effects(i)
Exit For
End If
Next i
End Function
...
Имею следующую ситуацию:
в Effects содержится экземпляр класса clsLinColorStretch. Делаю вызов:
Что такое PerformEffectEx, Data, DataOrig - не важно, там все нормально. И на строчке
Can not call friend function on object which is not an instance of defining class
Что мне делать с этой бякой?
Мне необходимо использовать Friend, так как в классе есть и другие подобные функции, берущие и возвращающие User defined типы. Просто эта та функция, на которую я напоролся.
Примечание. Может подскажите, каким образом я могу сделать Public вместо Friend, если функции класса используют User Defined Types.
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #1
Добавлено: 17.11.05 23:51
Измени тип проекта на ActiveX exe и помести описания udt в модуль класса как public.
Либо меняй архитектуру вызовов.
Номер ответа: 2
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #2
Добавлено: 18.11.05 00:03
Так у меня же обычный Exe. Как зе я буду его запускать, если он будет ActiveX exe? Или ActiveX Exe и так просто запускать можно? Я, если честно, в этом не шибко разбираюсь... попробую.
Номер ответа: 3
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #3
Добавлено: 18.11.05 00:08
Воткнул ActiveX Exe.
Не врубился. Он хочет Public Creatable Object. Нафиг он ему? Если я создам его, что мне туда написать?
Номер ответа: 4
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #4
Добавлено: 18.11.05 00:12
Ну сделал я ему Public Creatable Object.
Теперь он не хочет запускаться - выводит окно выбора способа запуска. А я хочу, чтобы мой проект работал именно как exe, а не как элемент управления... Графический редактор все-таки, а не кнопка...
Номер ответа: 5
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #5
Добавлено: 18.11.05 01:39
Project1 Properties
General: startup object - Sub Main
Component: stapt mode - standalone
frmMain.show
end sub
Номер ответа: 6
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #6
Добавлено: 21.11.05 00:20
Да. Это работает. Спасибо.
Хотя я все-же понял, что несложно убрать UDT из аргументов, что и сделал. А то уж больно смущает меня, что моя прога вдруг компонентом оказалась...
Номер ответа: 7
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #7
Добавлено: 21.11.05 11:20
Хм...
Может поясните тупому
а). Где в этом коде udt?
б). Почему в стандартном ехе не катят Public типы в модуле?
Номер ответа: 8
Автор ответа:
Victor
ICQ: 345743490
Вопросов: 42
Ответов: 385
Web-сайт:
Профиль | | #8
Добавлено: 25.11.05 01:40
Вот попробуй написать Public функцию в код класса, передующую UDT.
Номер ответа: 9
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #9
Добавлено: 25.11.05 11:49
Так а нафиг тебе её объявлять как Public? У тя же обычный exe, объяви её как Friend.
Номер ответа: 10
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #10
Добавлено: 25.11.05 11:52
Перечитал твой вопрос, похоже у тебя с Friend проблема Тогда последний совет не катит
Хотя сам на такое не напарывался, это надо код смотреть.