Autor Téma: MS Active scripting  (Přečteno 317 krát)

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 185
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
MS Active scripting
« kdy: 19-03-2021, 17:15:24 »
Nemá někdo MS Active Scripting interface, který by pracoval i pod 64b verzí Delphi?
Jedná se mi o IActiveScript a IActiveScriptSite
Už se s tím trápím dlouho a stále se mi nedaří to pod 64b rozchodit.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2869
  • Karma: 106
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:MS Active scripting
« Odpověď #1 kdy: 19-03-2021, 17:45:07 »
Ja tomu zas tak nerozumim, ale kdyz pouzijes 64bit verzi $(BDS)\bin64\tlibimp.exe  tak bys mel naimportovat 64bit verzi Active Scripting. 32bit a IDE (ktere je taky 32bit) ti naimportuje 32bit verzi.

Aspon tak me chabe znalosti.
Embarcadero MVP - Czech republic

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 185
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:MS Active scripting
« Odpověď #2 kdy: 20-03-2021, 12:34:42 »
Mělo by. Ale nepodařilo se mi v posledních verzích Delphi najít "něco" (myšlen COM nebo ACTIVEX), co by po importu vytvořilo IActiveScript a IActiveScriptSite intefejsy.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2869
  • Karma: 106
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:MS Active scripting
« Odpověď #3 kdy: 21-03-2021, 12:02:59 »
Co s tim má společného Delphi? Podle toho co jsem se dočetl by musela být v systému 64 bit verze toho specialniho ActiveX prvku. Delphi by to pak importovalo přes tu 64bit variantu tlibimp.exe co jsem psal. Ale to je jedno.

Tohle jsi viděl https://stackoverflow.com/questions/31429095/access-violation-in-iactivescript-addnameditem-delphi-64-bit ?
Resp. kam ses vlastně dostal?
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2869
  • Karma: 106
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Re:MS Active scripting
« Odpověď #4 kdy: 21-03-2021, 12:10:10 »
A kdyz jsem zkousel googlit ten GUIDz 64bit: {C7EF7658-E1EE-480E-97EA-D52CB4D76D17} a pas tak mne to hodilo na http://forum.lmd.de/discussion/976/is-jscript-supported-on-64-bits kde je

Kód: Delphi [Vybrat]
  1.   (* JPG *)
  2.   {$IFDEF WIN64}
  3.   IID_IActiveScriptParseProcedure: TGUID = '{C64713B6-E029-4CC5-9200-438B72890B6A}';
  4.   IID_IActiveScriptParseProcedureOld: TGUID = '{21F57128-08C9-4638-BA12-22D15D88DC5C}';
  5.   IID_IActiveScriptParse: TGUID = '{C7EF7658-E1EE-480E-97EA-D52CB4D76D17}';
  6.   {$ELSE}
  7.   IID_IActiveScriptParseProcedure: TGUID = '{AA5B6A80-B834-11D0-932F-00A0C90DCAA9}';
  8.   IID_IActiveScriptParseProcedureOld: TGUID = '{1CFF0050-6FDD-11D0-9328-00A0C90DCAA9}';
  9.   IID_IActiveScriptParse: TGUID = '{BB1A2AE2-A4F9-11CF-8F20-00805F2CD064}';
  10.   {$ENDIF}
  11.  
  12. // Remove definition of tagEXCEPINFO and EXCEPINFO. These types are already declared in Winapi.ActiveX.
  13.  
  14. // Modify prototype of IActiveScriptSite.GetItemInfo. In 64 bits, I don't know why, does not with a IUnknown parameter:
  15.  
  16.   {$IFDEF WIN64}
  17.     procedure GetItemInfo(pstrName: PWideChar;
  18.                           dwReturnMask: LongWord;
  19.                           out ppiunkItem: Pointer;
  20.                           out ppti: Pointer); safecall;
  21.   {$ELSE}
  22.     procedure GetItemInfo(pstrName: PWideChar;
  23.                           dwReturnMask: LongWord;
  24.                           out ppiunkItem: IUnknown;
  25.                           out ppti: IUnknown); safecall;
  26.   {$ENDIF}
  27.  
  28. // Modify GUIDs in the IActiveScriptParseProcedure, IActiveScriptParseProcedureOld and IActiveScriptParse definitions:
  29.  
  30.   IActiveScriptParseProcedure = interface(IUnknown)
  31.     {$IFDEF WIN64}
  32.     ['{C64713B6-E029-4CC5-9200-438B72890B6A}']
  33.     {$ELSE}
  34.     ['{AA5B6A80-B834-11D0-932F-00A0C90DCAA9}']
  35.     {$ENDIF}
  36.  
  37.   IActiveScriptParseProcedureOld = interface(IUnknown)
  38.     {$IFDEF WIN64}
  39.     ['{21F57128-08C9-4638-BA12-22D15D88DC5C}']
  40.     {$ELSE}
  41.     ['{1CFF0050-6FDD-11D0-9328-00A0C90DCAA9}']
  42.     {$ENDIF}
  43.    
  44.   IActiveScriptParse = interface(IUnknown)
  45.     {$IFDEF WIN64}
  46.     ['{C7EF7658-E1EE-480E-97EA-D52CB4D76D17}']
  47.     {$ELSE}
  48.     ['{BB1A2AE2-A4F9-11CF-8F20-00805F2CD064}']
  49.     {$ENDIF}
  50.  

Třeba ti to pomůže. Každopádně bych to hledal přes ty GUID ze SO
Embarcadero MVP - Czech republic

Offline Jan Fiala

  • Plnoletý
  • ***
  • Příspěvků: 185
  • Karma: 2
    • Verze Delphi: 10.4.1
    • PSPad editor
Re:MS Active scripting
« Odpověď #5 kdy: 22-03-2021, 08:17:54 »
Díky, zkusím. Právě s tím GetItem() byl problém - jsou odlišné deklarace interface pro x32 a x64 (nejen GUID).
A s tím pak samozřejmě souvisí implementace interface.

A ano, StackOverFlow jsem našel, zkoušel, ale moc dál jsem se nedostal. Pokud se koukneš na post v LMD fóru, tak tam je změn víc, včetně vyhození kontroly, že WSH jazyk není podporvaný. K tomuto jsem se dostal. Možná že stačío už jen vyhodit tu kontrolu na podporu jazyka a prošlo by to.

Nehledě na to, že sám MS deklaruje, že Active script support pro 64b není a nebude. Zřejmě by nebyl problém zaměnit WSH za "nějaký" konkrétní jazyk - Pascal, Python, ale uživatelé jsou zvyklí na JScript, protože jej používají denně při psaní webů, Android aplikací, případně VBScript, se kterým se setkávají zase u Office produktů.
« Poslední změna: 22-03-2021, 08:35:33 od Jan Fiala »