2015-05-04 4 views
-1

Мне нужно выяснить, как ссылаться на подпрограмму внутри другого модуля с помощью ссылки. Это то, что я пытаюсь сделать:Как получить ссылку на подпрограмму в модуле

Module Mod1 

    sub_x(pass a reference to this module) 

    Private Sub close_me() 
     ' do something here 
    End Sub 

End Module 

Module Mod2 

    Public Sub sub_x(get the reference to the passed module) 
     reference to passed module.close_me() 
    End Sub 

End Module 

Sub_x будет получать вызовы от нескольких разных модулей. Все вызывающие модули будут иметь подпрограмму close_me(). Поэтому мне нужно знать, какой модуль вызывает sub_x, поэтому я знаю, какой из них закрыть.

+0

модули в VB, как 'shared' функций в классах. Нет концепции экземпляра модуля или «закрытия» модуля. Если вы хотите эту функциональность, используйте классы без общих методов. – ps2goat

+0

Я действительно не закрываю модуль. Функция close_me() ссылается на то, что происходит внутри модуля. – user2721815

+0

Просто поймите, что это не будет потокобезопасным, если вы не построите его с помощью некоторых встроенных методов, таких как 'Sync' – ps2goat

ответ

0

В Mod2:

Public Sub sub_x(ByVal closeModule As Action) 
    closeModule() 
End Sub 

В Mod1:

Mod2.sub_x(AddressOf Mod1.close_me) 
+0

. Спасибо, Джоэл, похоже, что он должен работать, но он дает мне ошибку в Mod1, говоря, что Me в модуле недействителен. – user2721815

+0

Измените его на имя модуля. –

+0

Я тоже не могу использовать имя модуля, но если я просто отойду от него, он, кажется, примет его без ошибок. Если я нахожусь над ним, он показывает имя модуля, на который я ссылаюсь. Однако, когда я запускаю его, он фактически не вызывает модуль. Если я прослежу его, и я покажу значение closeModule в Mod2, он показывает, что это действительно System.Action. – user2721815