Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Com Interop Conditional Implements Statement
Message
From
08/06/2011 13:30:12
 
 
To
08/06/2011 11:56:16
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Environment versions
Visual FoxPro:
VFP 9 SP1
OS:
Windows XP SP2
Network:
Windows 2003 Server
Database:
MS SQL Server
Application:
Desktop
Miscellaneous
Thread ID:
01513528
Message ID:
01513619
Views:
56
Also, any chance of using the TypeLibGuid or ProgID


The TypeLib parameter is the least recommended way to specify the type library because this requires a file name whose path might differ from computer to computer.
If you are distributing your .dll, consider using TypeLibGUID or ProgID instead.




>Never used the implements - but if you only want one exe why not
>
>(1) ensure "C:\Program Files (x86)\netappdirectory\filename.tlb" exists on the build server
>
>(2) DEFINE CLASS AppEvents AS SESSION
> IMPLEMENTS iEvents IN "C:\Program Files (x86)\netappdirectory\filename.tlb"
>
>
>
>So it will always compile on the build server
>
>Finally test whether the exe works on both 32 bit and 64 bit systems
>
>
>
>
>>Thanks but it's a no-go. :( In both cases, we have to compile a 32 bit version (with the path there) and a 64 bit version (with the x86 path there) for this to work. don't want two separate exes... and if the path doesn't exist at build time (which it won't on a build server), then it won't work for either :(
>>
>>
>>>Untested but worth trying
>>>
>>>
>>>
>>>#if file("C:\Program Files\netappdirectory\filename.tlb")
>>>#     define TLB_FILE  "C:\Program Files\netappdirectory\filename.tlb"
>>>#else
>>>#     define TLB_FILE  "C:\Program Files (x86)\netappdirectory\filename.tlb"
>>>#endif
>>>
>>>DEFINE CLASS AppEvents AS SESSION
>>>IMPLEMENTS iEvents IN  TLB_FILE  
>>>
>>>
>>>
>>>or
>>>
>>>
>>>DEFINE CLASS AppEvents AS SESSION
>>>#if file("C:\Program Files\netappdirectory\filename.tlb")
>>>IMPLEMENTS iEvents IN   "C:\Program Files\netappdirectory\filename.tlb"
>>>#else
>>>IMPLEMENTS iEvents IN   "C:\Program Files (x86)\netappdirectory\filename.tlb"
>>>#endif
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>>I posted this question yesterday, but do not see it in my list of messages so reposting....
>>>>
>>>>
>>>>I have a class defined for com interop with a .net dll which works great -- i hook into the events and can pass to/from the .net dll and fire events in vfp from the .net dll.
>>>>
>>>>The issue is Windows 7 64 versus 32 bit. The .net dll is always installed in the program files unless of course it is 64 bit windows which then installs into program files (x86).....
>>>>
>>>>In the DEFINE CLASS section, I have to point to the .tlb in the IMPLEMENTS statement
>>>>
>>>>If I point explicitly to the location:
>>>>
>>>>DEFINE CLASS AppEvents AS SESSION
>>>>IMPLEMENTS iEvents IN "C:\Program Files\netappdirectory\filename.tlb"
>>>>
>>>>or
>>>>
>>>>IMPLEMENTS iEvents IN "C:\Program Files (x86)\netappdirectory\filename.tlb"
>>>>
>>>>both work fine.
>>>>
>>>>However in the class definition, I cannot use (syntax errors -- not allowed):
>>>>
>>>>IF DIRECTORY(look for x86) AND FILE() etc...
>>>> IMPLEMENTS iEvents IN "C:\Program Files (x86)\netappdirectory\filename.tlb"
>>>>ELSE
>>>> .....
>>>>ENDIF
>>>>
>>>>But I can:
>>>>before class definition: lcNetDirfile = "C:\Program Files....."
>>>>and then in the class definition do this:
>>>>
>>>>IMPLEMENTS iEvents IN (EVALUATE(lcNetDirFile))
>>>>
>>>>however, it doesn't really work. It builds fine (no errors), but doesn't really work. I cannot hook into the events.
>>>>
>>>>I need a way to have a conditional use of implements in the class definition....
>>>>
>>>>Any ideas?
Gregory
Previous
Reply
Map
View

Click here to load this message in the networking platform