Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Фигня с классом и Friend Sub Добавлено: 17.11.05 23:33  

Автор вопроса:  Victor | Web-сайт: vt-dbnz.narod.ru | ICQ: 345743490 
Есть проект.
В нем есть класс интерфейса.
clsEffect.cls:

Friend Sub GetEffectDesc(ByRef IDName As String, _
                         ByRef MenuName As String)

End Sub


Дальше, имею его имплементацию.
clsLinColorStretch.cls:
Option Explicit
Implements clsEffect

...

Friend Sub GetEffectDesc(ByRef IDName As String, _
                         ByRef MenuName As String)
MenuName = "Multiplication"
IDName = "Gamma"
End Sub

...


Далее, есть где-то в проекте:
Dim Effects() As clsEffect
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 GetEffectByID("Gamma"), Data, DataOrig

Что такое PerformEffectEx, Data, DataOrig - не важно, там все нормально. И на строчке
    Effects(i).GetEffectDesc EfID, EfMnu
возникает ошибка
Run-time error '97':
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-сайт: vt-dbnz.narod.ru
 Профиль | | #2
Добавлено: 18.11.05 00:03

Измени тип проекта на ActiveX exe

Так у меня же обычный Exe. Как зе я буду его запускать, если он будет ActiveX exe? Или ActiveX Exe и так просто запускать можно? Я, если честно, в этом не шибко разбираюсь... попробую.

Ответить

Номер ответа: 3
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #3
Добавлено: 18.11.05 00:08
Воткнул ActiveX Exe.
Не врубился. Он хочет Public Creatable Object. Нафиг он ему? Если я создам его, что мне туда написать?

Ответить

Номер ответа: 4
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #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

sub main
  frmMain.show
end sub

Ответить

Номер ответа: 6
Автор ответа:
 Victor



ICQ: 345743490 

Вопросов: 42
Ответов: 385
 Web-сайт: vt-dbnz.narod.ru
 Профиль | | #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-сайт: vt-dbnz.narod.ru
 Профиль | | #8
Добавлено: 25.11.05 01:40
Где в этом коде udt?
В этом их нету, но это не единственные процедуры.
Почему в стандартном ехе не катят Public типы в модуле?
Без понятия. Compile Error. Ничего не смог поделать.
Вот попробуй написать 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 проблема :) Тогда последний совет не катит :)
Хотя сам на такое не напарывался, это надо код смотреть.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам