Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
How to use ProgIDFromCLSID API function?
Message
 
To
26/02/2008 06:25:33
Lu Ping
Zhuhai Tec Co.
Zhuhai, China
General information
Forum:
Visual FoxPro
Category:
COM/DCOM and OLE Automation
Miscellaneous
Thread ID:
01296369
Message ID:
01296375
Views:
39
Hi Lu,

This is one of the trickier APIs because of the memory handle. But here is a sample function that shows how it is used in VFP:
?GetProgID([{002D2B10-C1FA-4193-B134-D86EAECC5250}])

********************************************************
FUNCTION GetProgID(tcCLSID)

  LOCAL lqCLSID, lcProgID, lhMem
  
  DO CASE
  CASE LEN(tcCLSID) = 16
    lqCLSID = tcCLSID
  CASE LIKE([{????????-????-????-????-????????????}],tcCLSID)
    lqCLSID = REPLICATE(0h00,16)
    
    IF CLSIDFromString(STRCONV(tcCLSID+CHR(0),5),@lqCLSID) <> 0
      ERROR "Invalid CLSID"
    ENDIF
  OTHERWISE
    ERROR "Invalid CLSID"
  ENDCASE
  
  lhMem = 0
  lcProgID = ""
  IF ProgIDFromCLSID(lqCLSID, @lhMem) = 0
    lcProgID = STRCONV(SYS(2600, lhMem, 80),6)
    lcProgID = LEFT(lcProgID, AT(CHR(0),lcProgID)-1)
    LocalFree(lhMem)
  ENDIF
  
  RETURN lcProgID

ENDFUNC

********************************************************
FUNCTION ProgIDFromCLSID(tcCLSID, tnProgID)
  DECLARE Long ProgIDFromCLSID IN ole32 String, Long@
  RETURN ProgIDFromCLSID(tcCLSID, @tnProgID)
ENDFUNC

********************************************************
FUNCTION CLSIDFromString(tcString, tcCLSID)
  DECLARE Long CLSIDFromString IN ole32 String, String@
  RETURN CLSIDFromString(tcString, @tcCLSID)
ENDFUNC

********************************************************
FUNCTION LocalFree(nHandle)
  DECLARE Long LocalFree IN WIN32API Long
  RETURN LocalFree(nHandle)
ENDFUNC
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform