Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
VFP COM Design Problem
Message
From
11/04/2007 14:31:56
Alexandre Palma
Harms Software, Inc.
Alverca, Portugal
 
General information
Forum:
Visual FoxPro
Category:
COM/DCOM and OLE Automation
Miscellaneous
Thread ID:
01214563
Message ID:
01214599
Views:
8
Kevin I know that the specs for COM+ classes is that the Init methot, instatiation doesn't support any params, I never tried to do it in VFP since I always used VFP COM objects from outside VFP and on asp vbscrift the server.createobject doesn't support params, so I don't know how that will work, if even VFP will complain.

>This would work.
>
>I had considered passing a value before I thought of the public variable, but I
>didn't want to take a chance the user could pass something in.
>
>But as long as the user doesn't know the Init takes a param, then it should not
>be a problem.
>
>Thanks
>
>
>
>
>>>I should have mentioned that I want it to be OLEPUBLIC, as I want it to appear
>>>in the object browser.
>>>
>>>It is necessary for users to be able to view the properties and methods on the
>>>child class. I just want to prevent them from instantiating it from outside
>>>the main class.
>>>
>>>
>>>
>>>>Kevin REmove the OLEPUBLIC keyword from your DEFINE CLASS stament for the class you don't want to be instantiated from the outside world, only classes mark as OLEPUBLIC are allowed to be created by an outside application.
>>>>
>>>>>I have PRG-based classlib that will be compiled into a DLL. There are classes in
>>>>>the DLL that I only want instantiated through methods in the main class.
>>>>>
>>>>>The problem is how to prevent a class from being instantiaed from outside the
>>>>>main class.
>>>>>
>>>>>One solution that I came up with is this:
>>>>>
>>>>>
>>>>>
>>>>>** Main Class
>>>>>PROCEDURE GetChildClass() AS Object
>>>>>
>>>>>  LOCAL oRetVal AS Object
>>>>>
>>>>>  PUBLIC gb_AllowChildClass && This must exist in the child class Init
>>>>>
>>>>>  oRetVal = This.GetChildClass()
>>>>>
>>>>>ENDPROC
>>>>>
>>>>>
>>>>>And in the Child class's Init:
>>>>>
>>>>>PROCEDURE Init()
>>>>>
>>>>>  LOCAL bRetVal AS Boolean
>>>>>  bRetVal = .T.
>>>>>
>>>>>  IF TYPE("AllowChildClass") = "U"
>>>>>    bRetVal = .F.
>>>>>  ENDIF
>>>>>
>>>>>  RETURN bRetVal
>>>>>
>>>>>ENDPROC
>>>>>
>>>>>
>>>>>Since the whole thing is in a DLL, it's in its own session, so there should
>>>>>be no issue with using a public variable.
>>>>>
>>>>>Still, I don't really feel good about it.
>>>>>
>>>>>Anyone have a better way?
>>
>>
>>How about:
>>
>>** Main Class
>>PROCEDURE GetChildClass() AS Object
>>
>> LOCAL oRetVal AS Object
>>
>> PUBLIC gb_AllowChildClass && This must exist in the child class Init
>>
>> oRetVal = This.GetChildClass([SomeUniqueStringYouImagnie])
>>
>>ENDPROC
>>
>>
>>*And in the Child class's Init:
>>
>>
>>PROCEDURE Init(lcUniqueString)
>>
>>  LOCAL bRetVal AS Boolean
>>  bRetVal = .T.
>>
>>  IF NOT lcUniqueString == SomeUniqueStringYouImagnie
>>     bRetVal = .F.
>>  ENDIF
>>
>>  RETURN bRetVal
>>
>>ENDPROC
>>
>>Then from your main class you could do:
>>
>>oRetVal = This.GetChildClass([AbraKadabra])
>>
>>
>>and in Init of the Child Class:
>>
>>
>>
>>PROCEDURE Init(lcUniqueString)
>>
>>  LOCAL bRetVal AS Boolean
>>  bRetVal = .T.
>>
>>  IF NOT lcUniqueString == [AbraKadabra]
>>     bRetVal = .F.
>>  ENDIF
>>
>>  RETURN bRetVal
>>
>>ENDPROC
>>
Alexandre Palma
Senior Application Architect
Previous
Reply
Map
View

Click here to load this message in the networking platform