webForumDet fria alternativet

Göra class-modul otillgänglig utanför projektet?

.NET

10 svar · 286 visningar · startad av Erik Juhlin

Medlem sedan maj 200010 687 inlägg
Frågan#1

Går det att på något sätt göra så att en class-modul endast går att komma åt från klasser i projektet och inte utanför?

Medlem sedan juni 20022 599 inlägg
#2

Ja. Du sätter Instancing till Private.

Medlem sedan maj 200010 687 inlägg
#3

Men då försvinner transaction alternativen. :(

Medlem sedan juni 20022 599 inlägg
Medlem sedan maj 200010 687 inlägg
#5

Använder jag PublicNotCreatable så kan jag inte komma åt klassen från andra klasser i projektet. :(

Medlem sedan dec. 19998 577 inlägg
#6

PublicNotCreatable. Other applications can use objects of this class only if your component creates the objects first. Other applications cannot use the CreateObject function or the New operator to create objects from the class

Borde ju fungera!?

Medlem sedan juni 20022 599 inlägg
#7

Använder jag PublicNotCreatable så kan jag inte komma åt klassen från andra klasser i projektet.

Nu hänger jag inte riktigt med. Blandar du inte ihop "projekt" och "projektgrupp"?

Oavsett om du använder "Private" eller "PublicNotCreatable" så kan du alltid komma åt klassen från andra klasser i samma komponent (projekt).

Private-> Du kan bara skapa instanser av klassen från andra klasser i samma komponent.

PublicNotCreatable->Du kan bara skapa instanser av klassen från andra klasser i samma komponent. MEN du kan räcka över en instans av klassen till extern kod. Den externa koden kan däremot inte anropa "New" eller "CreateObject" på egen hand.

Medlem sedan maj 200010 687 inlägg
#8

Det är i samma komponent. :l

Medlem sedan maj 200010 687 inlägg
#9

Kan det ha med att vi använder denna funktion istället för CreateObject?

Public Function CtxCreateObject(ByVal sProgID As String) As Object
    Dim objContext As ObjectContext
    Set objContext = GetObjectContext
    
    If Not (objContext Is Nothing) Then
        'Create an instance of the component
        Set CtxCreateObject = objContext.CreateInstance(sProgID)
        Set objContext = Nothing
    Else
        Set CtxCreateObject = CreateObject(sProgID)
    End If
End Function
Medlem sedan juni 20022 599 inlägg
#10

Kan det ha med att vi använder denna funktion istället för CreateObject?

Ja. Det är nog till och med så illa som att du måste använda "New" för klasser som är PublicnotCreatable eller Private. Och att använda "New" på komponenter som kör i MTS:en är kanske inte alltid så lyckat? Så jag har nog ingen lösning på problemet på rak arm. Tyvärr.

Medlem sedan maj 200010 687 inlägg
#11

Urk!
Skiter i det då. Inget hemligt där.

Mer för att inte någon klantig praktikant eller liknande ska få för sig att gå rakt på de klasserna. :)

265 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)