├── .editorconfig ├── .gitattributes ├── .gitignore ├── LICENSE.TXT ├── readme.txt ├── setup ├── setup.sln ├── setup │ ├── Resource.h │ ├── Setup_Install.ico │ ├── setup.cpp │ ├── setup.h │ ├── setup.rc │ ├── setup.vcproj │ ├── setup.vcxproj │ ├── setup.vcxproj.filters │ ├── stdafx.cpp │ ├── stdafx.h │ └── targetver.h ├── setup_2008.sln └── setup_2010.sln ├── tsc64.sln ├── tsc64 ├── Resource.h ├── dlldata.c ├── tsc64.cpp ├── tsc64.def ├── tsc64.h ├── tsc64.idl ├── tsc64.rc ├── tsc64.vcproj ├── tsc64.vcxproj ├── tsc64.vcxproj.filters └── tsc64_h.h ├── tsc64_2008.sln └── tsc64_2010.sln /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{cpp,h,js,vbs}] 2 | indent_style = tab 3 | end_of_line = crlf 4 | charset = utf-8 5 | trim_trailing_whitespace = true 6 | insert_final_newline = false 7 | indent_size = 4 8 | 9 | [*.{html,css,xml}] 10 | indent_style = space 11 | end_of_line = crlf 12 | charset = utf-8 13 | trim_trailing_whitespace = true 14 | insert_final_newline = false 15 | indent_size = 2 16 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | *.sln merge=union 7 | *.csproj merge=union 8 | *.vbproj merge=union 9 | *.fsproj merge=union 10 | *.dbproj merge=union 11 | 12 | # Standard to msysgit 13 | *.doc diff=astextplain 14 | *.DOC diff=astextplain 15 | *.docx diff=astextplain 16 | *.DOCX diff=astextplain 17 | *.dot diff=astextplain 18 | *.DOT diff=astextplain 19 | *.pdf diff=astextplain 20 | *.PDF diff=astextplain 21 | *.rtf diff=astextplain 22 | *.RTF diff=astextplain 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ################# 2 | ## Eclipse 3 | ################# 4 | 5 | *.pydevproject 6 | .project 7 | .metadata 8 | bin/ 9 | tmp/ 10 | *.tmp 11 | *.bak 12 | *.swp 13 | *~.nib 14 | local.properties 15 | .classpath 16 | .settings/ 17 | .loadpath 18 | 19 | # External tool builders 20 | .externalToolBuilders/ 21 | 22 | # Locally stored "Eclipse launch configurations" 23 | *.launch 24 | 25 | # CDT-specific 26 | .cproject 27 | 28 | # PDT-specific 29 | .buildpath 30 | 31 | 32 | ################# 33 | ## Visual Studio 34 | ################# 35 | 36 | ## Ignore Visual Studio temporary files, build results, and 37 | ## files generated by popular Visual Studio add-ons. 38 | 39 | # User-specific files 40 | *.suo 41 | *.user 42 | *.sln.docstates 43 | 44 | # Build results 45 | 46 | [Dd]ebug/ 47 | [Rr]elease/ 48 | x64/ 49 | build/ 50 | [Bb]in/ 51 | [Oo]bj/ 52 | 53 | # MSTest test Results 54 | [Tt]est[Rr]esult*/ 55 | [Bb]uild[Ll]og.* 56 | 57 | *_i.c 58 | *_p.c 59 | *.ilk 60 | *.meta 61 | *.obj 62 | *.pch 63 | *.pdb 64 | *.pgc 65 | *.pgd 66 | *.rsp 67 | *.sbr 68 | *.tlb 69 | *.tli 70 | *.tlh 71 | *.tmp 72 | *.tmp_proj 73 | *.log 74 | *.vspscc 75 | *.vssscc 76 | .builds 77 | *.pidb 78 | *.log 79 | *.scc 80 | 81 | # Visual C++ cache files 82 | ipch/ 83 | *.aps 84 | *.ncb 85 | *.opensdf 86 | *.sdf 87 | *.cachefile 88 | 89 | # Visual Studio profiler 90 | *.psess 91 | *.vsp 92 | *.vspx 93 | 94 | # Guidance Automation Toolkit 95 | *.gpState 96 | 97 | # ReSharper is a .NET coding add-in 98 | _ReSharper*/ 99 | *.[Rr]e[Ss]harper 100 | 101 | # TeamCity is a build add-in 102 | _TeamCity* 103 | 104 | # DotCover is a Code Coverage Tool 105 | *.dotCover 106 | 107 | # NCrunch 108 | *.ncrunch* 109 | .*crunch*.local.xml 110 | 111 | # Installshield output folder 112 | [Ee]xpress/ 113 | 114 | # DocProject is a documentation generator add-in 115 | DocProject/buildhelp/ 116 | DocProject/Help/*.HxT 117 | DocProject/Help/*.HxC 118 | DocProject/Help/*.hhc 119 | DocProject/Help/*.hhk 120 | DocProject/Help/*.hhp 121 | DocProject/Help/Html2 122 | DocProject/Help/html 123 | 124 | # Click-Once directory 125 | publish/ 126 | 127 | # Publish Web Output 128 | *.Publish.xml 129 | *.pubxml 130 | 131 | # NuGet Packages Directory 132 | ## TODO: If you have NuGet Package Restore enabled, uncomment the next line 133 | #packages/ 134 | 135 | # Windows Azure Build Output 136 | csx 137 | *.build.csdef 138 | 139 | # Windows Store app package directory 140 | AppPackages/ 141 | 142 | # Others 143 | sql/ 144 | *.Cache 145 | ClientBin/ 146 | [Ss]tyle[Cc]op.* 147 | ~$* 148 | *~ 149 | *.dbmdl 150 | *.[Pp]ublish.xml 151 | *.pfx 152 | *.publishsettings 153 | 154 | # RIA/Silverlight projects 155 | Generated_Code/ 156 | 157 | # Backup & report files from converting an old project file to a newer 158 | # Visual Studio version. Backup files are not needed, because we have git ;-) 159 | _UpgradeReport_Files/ 160 | Backup*/ 161 | UpgradeLog*.XML 162 | UpgradeLog*.htm 163 | 164 | # SQL Server files 165 | App_Data/*.mdf 166 | App_Data/*.ldf 167 | 168 | ############# 169 | ## Windows detritus 170 | ############# 171 | 172 | # Windows image file caches 173 | Thumbs.db 174 | ehthumbs.db 175 | 176 | # Folder config file 177 | Desktop.ini 178 | 179 | # Recycle Bin used on file shares 180 | $RECYCLE.BIN/ 181 | 182 | # Mac crap 183 | .DS_Store 184 | 185 | 186 | ############# 187 | ## Python 188 | ############# 189 | 190 | *.py[co] 191 | 192 | # Packages 193 | *.egg 194 | *.egg-info 195 | dist/ 196 | build/ 197 | eggs/ 198 | parts/ 199 | var/ 200 | sdist/ 201 | develop-eggs/ 202 | .installed.cfg 203 | 204 | # Installer logs 205 | pip-log.txt 206 | 207 | # Unit test / coverage reports 208 | .coverage 209 | .tox 210 | 211 | #Translations 212 | *.mo 213 | 214 | #Mr Developer 215 | .mr.developer.cfg 216 | -------------------------------------------------------------------------------- /LICENSE.TXT: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | Copyright (c) 2011 Gaku 3 | 4 | 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 26 | THE SOFTWARE. 27 | -------------------------------------------------------------------------------- /readme.txt: -------------------------------------------------------------------------------- 1 | Script Control for 64-bit platforms 2 | Tablacus Script Control 64 3 | 4 | Alternate MSScript.ocx 5 | 6 | * Install & Uninstall 7 | 8 | Run setup.exe 9 | 10 | or 11 | 12 | * Install 13 | Run as administrator 14 | regsvr32 tsc64.dll 15 | 16 | * Uninstall 17 | Run as administrator 18 | regsvr32 /u tsc64.dll 19 | 20 | Binary file is here. 21 | https://tablacus.github.io/scriptcontrol_en.html 22 | 23 | Build 24 | Visual C++ 2010 Express Edition SP1 25 | 26 | -------------------------------------------------------------------------------- /setup/setup.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Express 15 for Windows Desktop 4 | VisualStudioVersion = 15.0.28307.852 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "setup", "setup\setup.vcxproj", "{18F08231-6E96-4856-AF27-A654A850E675}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Win32 = Debug|Win32 11 | Debug|x64 = Debug|x64 12 | Release|Win32 = Release|Win32 13 | Release|x64 = Release|x64 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {18F08231-6E96-4856-AF27-A654A850E675}.Debug|Win32.ActiveCfg = Debug|Win32 17 | {18F08231-6E96-4856-AF27-A654A850E675}.Debug|Win32.Build.0 = Debug|Win32 18 | {18F08231-6E96-4856-AF27-A654A850E675}.Debug|x64.ActiveCfg = Debug|Win32 19 | {18F08231-6E96-4856-AF27-A654A850E675}.Debug|x64.Build.0 = Debug|Win32 20 | {18F08231-6E96-4856-AF27-A654A850E675}.Release|Win32.ActiveCfg = Release|Win32 21 | {18F08231-6E96-4856-AF27-A654A850E675}.Release|Win32.Build.0 = Release|Win32 22 | {18F08231-6E96-4856-AF27-A654A850E675}.Release|x64.ActiveCfg = Release|x64 23 | {18F08231-6E96-4856-AF27-A654A850E675}.Release|x64.Build.0 = Release|x64 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {022F667A-42B0-47E0-9869-6DB348E29575} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /setup/setup/Resource.h: -------------------------------------------------------------------------------- 1 | #define DLL_FILENAME L"tsc64.dll" 2 | #define IDS_APP_TITLE 103 3 | 4 | #define IDR_MAINFRAME 128 5 | #define IDM_INSTALL 103 6 | #define IDM_UNINSTALL 104 7 | #define IDM_EXIT 105 8 | #define IDI_SETUP 107 9 | #define IDC_SETUP 109 10 | #define IDC_MYICON 2 11 | #ifndef IDC_STATIC 12 | #define IDC_STATIC -1 13 | #endif 14 | // Next default values for new objects 15 | // 16 | #ifdef APSTUDIO_INVOKED 17 | #ifndef APSTUDIO_READONLY_SYMBOLS 18 | 19 | #define _APS_NO_MFC 130 20 | #define _APS_NEXT_RESOURCE_VALUE 129 21 | #define _APS_NEXT_COMMAND_VALUE 32771 22 | #define _APS_NEXT_CONTROL_VALUE 1000 23 | #define _APS_NEXT_SYMED_VALUE 110 24 | #endif 25 | #endif 26 | -------------------------------------------------------------------------------- /setup/setup/Setup_Install.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tablacus/TablacusScriptControl/34b2fe00362d85714f52ae8367fe959dbdc79423/setup/setup/Setup_Install.ico -------------------------------------------------------------------------------- /setup/setup/setup.cpp: -------------------------------------------------------------------------------- 1 | // Tablacus Script Control 64 Installer (C)2014 Gaku 2 | // MIT Lisence 3 | // Visual C++ 2017 Express Edition 4 | // Windows SDK v7.1 5 | // https://tablacus.github.io/ 6 | 7 | #include "stdafx.h" 8 | #include "setup.h" 9 | 10 | #define MAX_LOADSTRING 100 11 | 12 | // Global Variables: 13 | HINSTANCE hInst; // current instance 14 | TCHAR szTitle[MAX_LOADSTRING]; // The title bar text 15 | TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name 16 | 17 | // Forward declarations of functions included in this code module: 18 | ATOM MyRegisterClass(HINSTANCE hInstance); 19 | BOOL InitInstance(HINSTANCE, int); 20 | LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); 21 | INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); 22 | 23 | int APIENTRY _tWinMain(HINSTANCE hInstance, 24 | HINSTANCE hPrevInstance, 25 | LPTSTR lpCmdLine, 26 | int nCmdShow) 27 | { 28 | UNREFERENCED_PARAMETER(hPrevInstance); 29 | UNREFERENCED_PARAMETER(lpCmdLine); 30 | 31 | // TODO: Place code here. 32 | MSG msg; 33 | //Eliminates the vulnerable to a DLL pre-loading attack. 34 | LPFNSetDefaultDllDirectories lpfnSetDefaultDllDirectories = NULL; 35 | HMODULE hDll = GetModuleHandleA("kernel32.dll"); 36 | if (hDll) { 37 | lpfnSetDefaultDllDirectories = (LPFNSetDefaultDllDirectories)GetProcAddress(hDll, "SetDefaultDllDirectories"); 38 | } 39 | if (lpfnSetDefaultDllDirectories) { 40 | lpfnSetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_SYSTEM32); 41 | } else { 42 | // MessageBox(NULL, L"Require SetDefaultDllDirectories(KB2533623)", NULL, MB_ICONERROR | MB_OK); 43 | return EXIT_FAILURE; 44 | } 45 | // Initialize global strings 46 | LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); 47 | LoadString(hInstance, IDC_SETUP, szWindowClass, MAX_LOADSTRING); 48 | MyRegisterClass(hInstance); 49 | 50 | // Perform application initialization: 51 | if (!InitInstance (hInstance, nCmdShow)) 52 | { 53 | return FALSE; 54 | } 55 | 56 | // Main message loop: 57 | while (GetMessage(&msg, NULL, 0, 0)) 58 | { 59 | TranslateMessage(&msg); 60 | DispatchMessage(&msg); 61 | } 62 | 63 | return (int) msg.wParam; 64 | } 65 | 66 | 67 | 68 | // 69 | // FUNCTION: MyRegisterClass() 70 | // 71 | // PURPOSE: Registers the window class. 72 | // 73 | // COMMENTS: 74 | // 75 | // This function and its usage are only necessary if you want this code 76 | // to be compatible with Win32 systems prior to the 'RegisterClassEx' 77 | // function that was added to Windows 95. It is important to call this function 78 | // so that the application will get 'well formed' small icons associated 79 | // with it. 80 | // 81 | ATOM MyRegisterClass(HINSTANCE hInstance) 82 | { 83 | WNDCLASSEX wcex; 84 | 85 | wcex.cbSize = sizeof(WNDCLASSEX); 86 | 87 | wcex.style = CS_HREDRAW | CS_VREDRAW; 88 | wcex.lpfnWndProc = WndProc; 89 | wcex.cbClsExtra = 0; 90 | wcex.cbWndExtra = 0; 91 | wcex.hInstance = hInstance; 92 | wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_SETUP)); 93 | wcex.hCursor = LoadCursor(NULL, IDC_ARROW); 94 | wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); 95 | wcex.lpszMenuName = MAKEINTRESOURCE(IDC_SETUP); 96 | wcex.lpszClassName = szWindowClass; 97 | wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SETUP)); 98 | 99 | return RegisterClassEx(&wcex); 100 | } 101 | 102 | // 103 | // FUNCTION: InitInstance(HINSTANCE, int) 104 | // 105 | // PURPOSE: Saves instance handle and creates main window 106 | // 107 | // COMMENTS: 108 | // 109 | // In this function, we save the instance handle in a global variable and 110 | // create and display the main program window. 111 | // 112 | BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) 113 | { 114 | HWND hWnd; 115 | 116 | hInst = hInstance; // Store instance handle in our global variable 117 | 118 | hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, 119 | CW_USEDEFAULT, 0, 400, 200, NULL, NULL, hInstance, NULL); 120 | 121 | if (!hWnd) 122 | { 123 | return FALSE; 124 | } 125 | ShowWindow(hWnd, nCmdShow); 126 | UpdateWindow(hWnd); 127 | 128 | return TRUE; 129 | } 130 | 131 | // 132 | // FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) 133 | // 134 | // PURPOSE: Processes messages for the main window. 135 | // 136 | // WM_COMMAND - process the application menu 137 | // WM_PAINT - Paint the main window 138 | // WM_DESTROY - post a quit message and return 139 | // 140 | // 141 | LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 142 | { 143 | int wmId, wmEvent; 144 | PAINTSTRUCT ps; 145 | HDC hdc; 146 | WCHAR szSys32[MAX_PATH * 2]; 147 | WCHAR szRegSvr[MAX_PATH * 2]; 148 | WCHAR szPath[MAX_PATH * 2]; 149 | WCHAR szPath2[MAX_PATH * 2]; 150 | HWND hInstall, hUninstall; 151 | SHELLEXECUTEINFO sei = { sizeof(SHELLEXECUTEINFO) }; 152 | 153 | switch (message) 154 | { 155 | case WM_CREATE: 156 | hInstall = CreateWindow( 157 | _T("BUTTON"), 158 | _T("Install"), 159 | WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 160 | 40, 20, 161 | 300, 40, 162 | hWnd, 163 | (HMENU)(INT_PTR)IDM_INSTALL, 164 | hInst, 165 | NULL 166 | ); 167 | hUninstall = CreateWindow( 168 | _T("BUTTON"), 169 | _T("Uninstall"), 170 | WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 171 | 40, 80, 172 | 300, 40, 173 | hWnd, 174 | (HMENU)(INT_PTR)IDM_UNINSTALL, 175 | hInst, 176 | NULL 177 | ); 178 | return 0; 179 | case WM_COMMAND: 180 | wmId = LOWORD(wParam); 181 | wmEvent = HIWORD(wParam); 182 | 183 | GetSystemDirectory(szRegSvr, MAX_PATH * 2); 184 | PathAppend(szRegSvr, L"regsvr32.exe"); 185 | GetSystemDirectory(szSys32, MAX_PATH * 2); 186 | PathAppend(szSys32, DLL_FILENAME); 187 | GetModuleFileName(NULL, szPath, MAX_PATH * 2); 188 | PathRemoveFileSpec(szPath); 189 | PathAppend(szPath, DLL_FILENAME); 190 | sei.lpFile = szRegSvr; 191 | sei.nShow = SW_SHOWNORMAL; 192 | 193 | // Parse the menu selections: 194 | switch (wmId) 195 | { 196 | case IDM_INSTALL: 197 | CopyFile(szPath, szSys32, FALSE); 198 | sei.lpParameters = szSys32; 199 | ShellExecuteEx(&sei); 200 | break; 201 | case IDM_UNINSTALL: 202 | wsprintf(szPath2, L"/u %s", szSys32); 203 | sei.lpParameters = szPath2; 204 | sei.fMask = SEE_MASK_NOCLOSEPROCESS; 205 | ShellExecuteEx(&sei); 206 | ::WaitForSingleObject(sei.hProcess, INFINITE); 207 | DeleteFile(szSys32); 208 | break; 209 | case IDM_EXIT: 210 | DestroyWindow(hWnd); 211 | break; 212 | default: 213 | return DefWindowProc(hWnd, message, wParam, lParam); 214 | } 215 | break; 216 | case WM_PAINT: 217 | hdc = BeginPaint(hWnd, &ps); 218 | // TODO: Add any drawing code here... 219 | EndPaint(hWnd, &ps); 220 | break; 221 | case WM_DESTROY: 222 | PostQuitMessage(0); 223 | break; 224 | default: 225 | return DefWindowProc(hWnd, message, wParam, lParam); 226 | } 227 | return 0; 228 | } 229 | 230 | -------------------------------------------------------------------------------- /setup/setup/setup.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "resource.h" 4 | #include 5 | #include 6 | #pragma comment(lib, "shlwapi.lib") 7 | 8 | #ifdef _WIN64 9 | #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"") 10 | #else 11 | #pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") 12 | #define _2000XP 13 | #endif 14 | //8 or higher 15 | typedef BOOL (WINAPI* LPFNSetDefaultDllDirectories)(__in DWORD DirectoryFlags); 16 | #ifndef LOAD_LIBRARY_SEARCH_SYSTEM32 17 | #define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800 18 | #endif 19 | -------------------------------------------------------------------------------- /setup/setup/setup.rc: -------------------------------------------------------------------------------- 1 | //Microsoft Visual C++ generated resource script. 2 | // 3 | #include "resource.h" 4 | 5 | #define APSTUDIO_READONLY_SYMBOLS 6 | ///////////////////////////////////////////////////////////////////////////// 7 | // 8 | // Generated from the TEXTINCLUDE 2 resource. 9 | // 10 | #ifndef APSTUDIO_INVOKED 11 | #include "targetver.h" 12 | #endif 13 | #define APSTUDIO_HIDDEN_SYMBOLS 14 | #include "windows.h" 15 | #undef APSTUDIO_HIDDEN_SYMBOLS 16 | ///////////////////////////////////////////////////////////////////////////// 17 | #undef APSTUDIO_READONLY_SYMBOLS 18 | 19 | #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) 20 | LANGUAGE 9, 1 21 | #pragma code_page(932) 22 | 23 | ///////////////////////////////////////////////////////////////////////////// 24 | // 25 | // Icon 26 | // 27 | 28 | // Icon with lowest ID value placed first to ensure application icon 29 | // remains consistent on all systems. 30 | 31 | IDI_SETUP ICON "Setup_Install.ico" 32 | 33 | ///////////////////////////////////////////////////////////////////////////// 34 | // 35 | // Menu 36 | // 37 | 38 | IDC_SETUP MENU 39 | BEGIN 40 | POPUP "&File" 41 | BEGIN 42 | MENUITEM "&Install", IDM_INSTALL 43 | MENUITEM "&Uninstall", IDM_UNINSTALL 44 | MENUITEM "E&xit", IDM_EXIT 45 | END 46 | END 47 | 48 | 49 | ///////////////////////////////////////////////////////////////////////////// 50 | // 51 | // DESIGNINFO 52 | // 53 | 54 | #ifdef APSTUDIO_INVOKED 55 | GUIDELINES DESIGNINFO 56 | BEGIN 57 | IDD_ABOUTBOX, DIALOG 58 | BEGIN 59 | LEFTMARGIN, 7 60 | RIGHTMARGIN, 163 61 | TOPMARGIN, 7 62 | BOTTOMMARGIN, 55 63 | END 64 | END 65 | #endif // APSTUDIO_INVOKED 66 | 67 | #ifdef APSTUDIO_INVOKED 68 | ///////////////////////////////////////////////////////////////////////////// 69 | // 70 | // TEXTINCLUDE 71 | // 72 | 1 TEXTINCLUDE 73 | BEGIN 74 | "resource.h\0" 75 | END 76 | 77 | 2 TEXTINCLUDE 78 | BEGIN 79 | "#ifndef APSTUDIO_INVOKED\r\n" 80 | "#include ""targetver.h""\r\n" 81 | "#endif\r\n" 82 | "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" 83 | "#include ""windows.h""\r\n" 84 | "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" 85 | "\0" 86 | END 87 | 88 | 3 TEXTINCLUDE 89 | BEGIN 90 | "\r\n" 91 | "\0" 92 | END 93 | 94 | #endif // APSTUDIO_INVOKED 95 | 96 | ///////////////////////////////////////////////////////////////////////////// 97 | // 98 | // String Table 99 | // 100 | 101 | STRINGTABLE 102 | BEGIN 103 | IDC_SETUP "SETUP" 104 | IDS_APP_TITLE "Tablacus Script Control 64 Installer" 105 | END 106 | 107 | #endif 108 | ///////////////////////////////////////////////////////////////////////////// 109 | 110 | 111 | 112 | #ifndef APSTUDIO_INVOKED 113 | ///////////////////////////////////////////////////////////////////////////// 114 | // 115 | // Generated from the TEXTINCLUDE 3 resource. 116 | // 117 | 118 | ///////////////////////////////////////////////////////////////////////////// 119 | #endif // not APSTUDIO_INVOKED 120 | -------------------------------------------------------------------------------- /setup/setup/setup.vcproj: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 15 | 18 | 19 | 20 | 21 | 22 | 29 | 32 | 35 | 38 | 41 | 44 | 55 | 58 | 61 | 64 | 71 | 74 | 77 | 80 | 83 | 86 | 89 | 92 | 93 | 100 | 103 | 106 | 109 | 112 | 116 | 127 | 130 | 133 | 136 | 143 | 146 | 149 | 152 | 155 | 158 | 161 | 164 | 165 | 173 | 176 | 179 | 182 | 185 | 188 | 199 | 202 | 205 | 208 | 218 | 221 | 224 | 227 | 230 | 233 | 236 | 239 | 240 | 248 | 251 | 254 | 257 | 260 | 264 | 275 | 278 | 281 | 284 | 294 | 297 | 300 | 303 | 306 | 309 | 312 | 315 | 316 | 317 | 318 | 319 | 320 | 325 | 328 | 329 | 332 | 335 | 339 | 340 | 343 | 347 | 348 | 351 | 355 | 356 | 359 | 363 | 364 | 365 | 366 | 371 | 374 | 375 | 378 | 379 | 382 | 383 | 386 | 387 | 388 | 393 | 396 | 397 | 400 | 401 | 404 | 405 | 406 | 409 | 410 | 411 | 412 | 413 | 414 | -------------------------------------------------------------------------------- /setup/setup/setup.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Debug 10 | x64 11 | 12 | 13 | Release 14 | Win32 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | {18F08231-6E96-4856-AF27-A654A850E675} 23 | setup 24 | Win32Proj 25 | 8.1 26 | 27 | 28 | 29 | Application 30 | Unicode 31 | true 32 | v141 33 | 34 | 35 | Application 36 | Unicode 37 | v141 38 | 39 | 40 | Application 41 | Unicode 42 | true 43 | Windows7.1SDK 44 | 45 | 46 | Application 47 | Unicode 48 | v141 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | <_ProjectFileVersion>10.0.40219.1 68 | $(SolutionDir)$(Configuration)\ 69 | $(Configuration)\ 70 | true 71 | $(SolutionDir)$(Platform)\$(Configuration)\ 72 | $(Platform)\$(Configuration)\ 73 | true 74 | $(SolutionDir)$(Configuration)\ 75 | $(Configuration)\ 76 | false 77 | $(SolutionDir)$(Platform)\$(Configuration)\ 78 | $(Platform)\$(Configuration)\ 79 | false 80 | 81 | 82 | 83 | Disabled 84 | WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) 85 | true 86 | EnableFastChecks 87 | MultiThreadedDebugDLL 88 | Use 89 | Level3 90 | EditAndContinue 91 | 92 | 93 | true 94 | Windows 95 | MachineX86 96 | 97 | 98 | 99 | 100 | X64 101 | 102 | 103 | Disabled 104 | WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) 105 | true 106 | EnableFastChecks 107 | MultiThreadedDebugDLL 108 | Use 109 | Level3 110 | ProgramDatabase 111 | 112 | 113 | true 114 | Windows 115 | MachineX64 116 | 117 | 118 | 119 | 120 | MinSpace 121 | true 122 | WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) 123 | MultiThreaded 124 | true 125 | Use 126 | Level3 127 | ProgramDatabase 128 | 129 | 130 | RequireAdministrator 131 | true 132 | Windows 133 | true 134 | true 135 | MachineX86 136 | 137 | 138 | 139 | 140 | X64 141 | 142 | 143 | MinSpace 144 | true 145 | WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) 146 | MultiThreaded 147 | true 148 | Use 149 | Level3 150 | ProgramDatabase 151 | 152 | 153 | RequireAdministrator 154 | true 155 | Windows 156 | true 157 | true 158 | MachineX64 159 | 160 | 161 | 162 | 163 | 164 | Create 165 | Create 166 | Create 167 | Create 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | -------------------------------------------------------------------------------- /setup/setup/setup.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav 15 | 16 | 17 | 18 | 19 | Source Files 20 | 21 | 22 | Source Files 23 | 24 | 25 | 26 | 27 | Header Files 28 | 29 | 30 | Header Files 31 | 32 | 33 | Header Files 34 | 35 | 36 | Header Files 37 | 38 | 39 | 40 | 41 | Resource Files 42 | 43 | 44 | Resource Files 45 | 46 | 47 | 48 | 49 | 50 | Resource Files 51 | 52 | 53 | -------------------------------------------------------------------------------- /setup/setup/stdafx.cpp: -------------------------------------------------------------------------------- 1 | // stdafx.cpp : source file that includes just the standard includes 2 | // setup.pch will be the pre-compiled header 3 | // stdafx.obj will contain the pre-compiled type information 4 | 5 | #include "stdafx.h" 6 | 7 | // TODO: reference any additional headers you need in STDAFX.H 8 | // and not in this file 9 | -------------------------------------------------------------------------------- /setup/setup/stdafx.h: -------------------------------------------------------------------------------- 1 | // stdafx.h : include file for standard system include files, 2 | // or project specific include files that are used frequently, but 3 | // are changed infrequently 4 | // 5 | 6 | #pragma once 7 | 8 | #include "targetver.h" 9 | 10 | #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers 11 | // Windows Header Files: 12 | #include 13 | 14 | // C RunTime Header Files 15 | #include 16 | #include 17 | #include 18 | #include 19 | 20 | 21 | // TODO: reference additional headers your program requires here 22 | -------------------------------------------------------------------------------- /setup/setup/targetver.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // The following macros define the minimum required platform. The minimum required platform 4 | // is the earliest version of Windows, Internet Explorer etc. that has the necessary features to run 5 | // your application. The macros work by enabling all features available on platform versions up to and 6 | // including the version specified. 7 | 8 | // Modify the following defines if you have to target a platform prior to the ones specified below. 9 | // Refer to MSDN for the latest info on corresponding values for different platforms. 10 | #ifndef WINVER // Specifies that the minimum required platform is Windows Vista. 11 | #define WINVER 0x0600 // Change this to the appropriate value to target other versions of Windows. 12 | #endif 13 | 14 | #ifndef _WIN32_WINNT // Specifies that the minimum required platform is Windows Vista. 15 | #define _WIN32_WINNT 0x0600 // Change this to the appropriate value to target other versions of Windows. 16 | #endif 17 | 18 | #ifndef _WIN32_WINDOWS // Specifies that the minimum required platform is Windows 98. 19 | #define _WIN32_WINDOWS 0x0410 // Change this to the appropriate value to target Windows Me or later. 20 | #endif 21 | 22 | #ifndef _WIN32_IE // Specifies that the minimum required platform is Internet Explorer 7.0. 23 | #define _WIN32_IE 0x0700 // Change this to the appropriate value to target other versions of IE. 24 | #endif 25 | -------------------------------------------------------------------------------- /setup/setup_2008.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 10.00 3 | # Visual C++ Express 2008 4 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "setup", "setup\setup.vcproj", "{18F08231-6E96-4856-AF27-A654A850E675}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|Win32 = Debug|Win32 9 | Debug|x64 = Debug|x64 10 | Release|Win32 = Release|Win32 11 | Release|x64 = Release|x64 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {18F08231-6E96-4856-AF27-A654A850E675}.Debug|Win32.ActiveCfg = Debug|Win32 15 | {18F08231-6E96-4856-AF27-A654A850E675}.Debug|Win32.Build.0 = Debug|Win32 16 | {18F08231-6E96-4856-AF27-A654A850E675}.Debug|x64.ActiveCfg = Debug|Win32 17 | {18F08231-6E96-4856-AF27-A654A850E675}.Debug|x64.Build.0 = Debug|Win32 18 | {18F08231-6E96-4856-AF27-A654A850E675}.Release|Win32.ActiveCfg = Release|Win32 19 | {18F08231-6E96-4856-AF27-A654A850E675}.Release|Win32.Build.0 = Release|Win32 20 | {18F08231-6E96-4856-AF27-A654A850E675}.Release|x64.ActiveCfg = Release|x64 21 | {18F08231-6E96-4856-AF27-A654A850E675}.Release|x64.Build.0 = Release|x64 22 | EndGlobalSection 23 | GlobalSection(SolutionProperties) = preSolution 24 | HideSolutionNode = FALSE 25 | EndGlobalSection 26 | EndGlobal 27 | -------------------------------------------------------------------------------- /setup/setup_2010.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual C++ Express 2010 4 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "setup", "setup\setup.vcxproj", "{18F08231-6E96-4856-AF27-A654A850E675}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|Win32 = Debug|Win32 9 | Debug|x64 = Debug|x64 10 | Release|Win32 = Release|Win32 11 | Release|x64 = Release|x64 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {18F08231-6E96-4856-AF27-A654A850E675}.Debug|Win32.ActiveCfg = Debug|Win32 15 | {18F08231-6E96-4856-AF27-A654A850E675}.Debug|Win32.Build.0 = Debug|Win32 16 | {18F08231-6E96-4856-AF27-A654A850E675}.Debug|x64.ActiveCfg = Debug|Win32 17 | {18F08231-6E96-4856-AF27-A654A850E675}.Debug|x64.Build.0 = Debug|Win32 18 | {18F08231-6E96-4856-AF27-A654A850E675}.Release|Win32.ActiveCfg = Release|Win32 19 | {18F08231-6E96-4856-AF27-A654A850E675}.Release|Win32.Build.0 = Release|Win32 20 | {18F08231-6E96-4856-AF27-A654A850E675}.Release|x64.ActiveCfg = Release|x64 21 | {18F08231-6E96-4856-AF27-A654A850E675}.Release|x64.Build.0 = Release|x64 22 | EndGlobalSection 23 | GlobalSection(SolutionProperties) = preSolution 24 | HideSolutionNode = FALSE 25 | EndGlobalSection 26 | EndGlobal 27 | -------------------------------------------------------------------------------- /tsc64.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Express 15 for Windows Desktop 4 | VisualStudioVersion = 15.0.28307.852 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tsc64", "tsc64\tsc64.vcxproj", "{BDD47254-2D2A-4984-920A-D52D65949630}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Win32 = Debug|Win32 11 | Debug|x64 = Debug|x64 12 | Release|Win32 = Release|Win32 13 | Release|x64 = Release|x64 14 | EndGlobalSection 15 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 16 | {BDD47254-2D2A-4984-920A-D52D65949630}.Debug|Win32.ActiveCfg = Debug|Win32 17 | {BDD47254-2D2A-4984-920A-D52D65949630}.Debug|Win32.Build.0 = Debug|Win32 18 | {BDD47254-2D2A-4984-920A-D52D65949630}.Debug|x64.ActiveCfg = Debug|x64 19 | {BDD47254-2D2A-4984-920A-D52D65949630}.Debug|x64.Build.0 = Debug|x64 20 | {BDD47254-2D2A-4984-920A-D52D65949630}.Release|Win32.ActiveCfg = Release|Win32 21 | {BDD47254-2D2A-4984-920A-D52D65949630}.Release|Win32.Build.0 = Release|Win32 22 | {BDD47254-2D2A-4984-920A-D52D65949630}.Release|x64.ActiveCfg = Release|x64 23 | {BDD47254-2D2A-4984-920A-D52D65949630}.Release|x64.Build.0 = Release|x64 24 | EndGlobalSection 25 | GlobalSection(SolutionProperties) = preSolution 26 | HideSolutionNode = FALSE 27 | EndGlobalSection 28 | GlobalSection(ExtensibilityGlobals) = postSolution 29 | SolutionGuid = {C86845BC-38B5-4EDC-B9B5-FBE0B14D9D08} 30 | EndGlobalSection 31 | EndGlobal 32 | -------------------------------------------------------------------------------- /tsc64/Resource.h: -------------------------------------------------------------------------------- 1 | //Version 2 | #define PRODUCTNAME "Tablacus Script Control 64" 3 | #define TITLE L"Tablacus Script Host" 4 | #define STRING(str) STRING2(str) 5 | #define STRING2(str) #str 6 | #define VER_Y 1 7 | #define VER_M 2 8 | #define VER_D 5 9 | #define VER_Z 4 10 | -------------------------------------------------------------------------------- /tsc64/dlldata.c: -------------------------------------------------------------------------------- 1 | /********************************************************* 2 | DllData file -- generated by MIDL compiler 3 | 4 | DO NOT ALTER THIS FILE 5 | 6 | This file is regenerated by MIDL on every IDL file compile. 7 | 8 | To completely reconstruct this file, delete it and rerun MIDL 9 | on all the IDL files in this DLL, specifying this file for the 10 | /dlldata command line option 11 | 12 | *********************************************************/ 13 | 14 | #define PROXY_DELEGATION 15 | 16 | #include 17 | 18 | #ifdef __cplusplus 19 | extern "C" { 20 | #endif 21 | 22 | EXTERN_PROXY_FILE( tsc64 ) 23 | 24 | 25 | PROXYFILE_LIST_START 26 | /* Start of list */ 27 | REFERENCE_PROXY_FILE( tsc64 ), 28 | /* End of list */ 29 | PROXYFILE_LIST_END 30 | 31 | 32 | DLLDATA_ROUTINES( aProxyFileList, GET_DLL_CLSID ) 33 | 34 | #ifdef __cplusplus 35 | } /*extern "C" */ 36 | #endif 37 | 38 | /* end of generated dlldata file */ 39 | -------------------------------------------------------------------------------- /tsc64/tsc64.cpp: -------------------------------------------------------------------------------- 1 | // Tablacus Script Control 64 (C)2014 Gaku 2 | // MIT Lisence 3 | // Visual C++ 2017 Express Edition 4 | // https://tablacus.github.io/ 5 | 6 | #include "tsc64.h" 7 | 8 | #ifdef _WIN64 9 | const TCHAR g_szProgid[] = TEXT("MSScriptControl.ScriptControl"); 10 | const TCHAR g_szClsid[] = TEXT("{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}"); 11 | const TCHAR g_szLibid[] = TEXT("{0E59F1D2-1FBE-11D0-8FF2-00A0D10038BC}"); 12 | const CLSID LIBID_TScriptControl = {0x0E59F1D2, 0x1FBE, 0x11D0, {0x8F, 0xF2, 0x00, 0xA0, 0xD1, 0x00, 0x38, 0xBC}}; 13 | #else 14 | const TCHAR g_szProgid[] = TEXT("Tablacus.ScriptControl"); 15 | const TCHAR g_szClsid[] = TEXT("{760F48FE-E6E8-4d9d-AFD4-C7B393D4211F}");//test 16 | const TCHAR g_szLibid[] = TEXT("{956BC468-C878-4BB4-BB0B-ACA410002E31}");//test 17 | const CLSID LIBID_TScriptControl = {0x956BC468, 0xC878, 0x4BB4, {0xBB, 0x0B, 0xAC, 0xA4, 0x10, 0x00, 0x2E, 0x31}};//test 18 | #endif 19 | 20 | const CLSID IID_IScriptControl = {0x0E59F1D3, 0x1FBE, 0x11D0, {0x8F, 0xF2, 0x00, 0xA0, 0xD1, 0x00, 0x38, 0xBC}}; 21 | const CLSID DIID_DScriptControlSource = {0x8B167D60, 0x8605, 0x11D0, {0xAB, 0xCB, 0x00, 0xA0, 0xC9, 0x0F, 0xFF, 0xC0}}; 22 | 23 | LONG g_lLocks = 0; 24 | HINSTANCE g_hinstDll = NULL; 25 | IScriptControl *pSC; 26 | CLSID CLSID_TScriptServer; 27 | GUID g_ClsIdScriptObject; 28 | 29 | int *g_map; 30 | 31 | TEmethod methodTSC[] = { 32 | //property 33 | { 1500, L"Language" }, 34 | { 1501, L"State" }, 35 | { 1502, L"SitehWnd" }, 36 | { 1503, L"Timeout" }, 37 | { 1504, L"AllowUI" }, 38 | { 1505, L"UseSafeSubset" }, 39 | { 1506, L"Modules" }, 40 | { 1507, L"Error" }, 41 | { 1000, L"CodeObject" }, 42 | { 1001, L"Procedures" }, 43 | //method 44 | { -552, L"_AboutBox" }, 45 | { 2500, L"AddObject" }, 46 | { 2501, L"Reset" }, 47 | { 2000, L"AddCode" }, 48 | { 2001, L"Eval" }, 49 | { 2002, L"ExecuteStatement" }, 50 | { 2003, L"Run" }, 51 | { 0, NULL } 52 | }; 53 | 54 | #pragma warning(push) 55 | #pragma warning(disable:4838) 56 | TEmethod methodTSE[] = { 57 | //property 58 | { 0x000000c9, L"Number" }, 59 | { 0x000000ca, L"Source" }, 60 | { 0x000000cb, L"Description" }, 61 | { 0x000000cd, L"HelpContext" }, 62 | { 0xfffffdfb, L"Text" }, 63 | { 0x000000ce, L"Line" }, 64 | { 0xfffffdef, L"Column" }, 65 | //method 66 | { 0x000000d0, L"Clear" }, 67 | { 0, NULL } 68 | }; 69 | #pragma warning(pop) 70 | 71 | // Functions 72 | VOID SafeRelease(PVOID ppObj) 73 | { 74 | try { 75 | IUnknown **ppunk = static_cast(ppObj); 76 | if (*ppunk) { 77 | (*ppunk)->Release(); 78 | *ppunk = NULL; 79 | } 80 | } catch (...) {} 81 | } 82 | 83 | VOID teSysFreeString(BSTR *pbs) 84 | { 85 | if (*pbs) { 86 | ::SysFreeString(*pbs); 87 | *pbs = NULL; 88 | } 89 | } 90 | 91 | void LockModule(BOOL bLock) 92 | { 93 | if (bLock) { 94 | InterlockedIncrement(&g_lLocks); 95 | } else { 96 | InterlockedDecrement(&g_lLocks); 97 | } 98 | } 99 | 100 | VOID teClearExceptInfo(EXCEPINFO *pEI) 101 | { 102 | teSysFreeString(&pEI->bstrSource); 103 | teSysFreeString(&pEI->bstrDescription); 104 | teSysFreeString(&pEI->bstrHelpFile); 105 | ::ZeroMemory(pEI, sizeof(EXCEPINFO)); 106 | } 107 | 108 | HRESULT ShowRegError(LSTATUS lr) 109 | { 110 | LPTSTR lpBuffer = NULL; 111 | FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 112 | NULL, lr, LANG_USER_DEFAULT, 113 | (LPTSTR)&lpBuffer, 0, NULL ); 114 | MessageBox(NULL, lpBuffer, g_szProgid, MB_ICONHAND | MB_OK); 115 | LocalFree(lpBuffer); 116 | return HRESULT_FROM_WIN32(lr); 117 | } 118 | 119 | LSTATUS CreateRegistryKey(HKEY hKeyRoot, LPTSTR lpszKey, LPTSTR lpszValue, LPTSTR lpszData) 120 | { 121 | HKEY hKey; 122 | LSTATUS lr; 123 | DWORD dwSize; 124 | 125 | lr = RegCreateKeyEx(hKeyRoot, lpszKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL); 126 | if (lr == ERROR_SUCCESS) { 127 | if (lpszData != NULL) { 128 | dwSize = (lstrlen(lpszData) + 1) * sizeof(TCHAR); 129 | } else { 130 | dwSize = 0; 131 | } 132 | lr = RegSetValueEx(hKey, lpszValue, 0, REG_SZ, (LPBYTE)lpszData, dwSize); 133 | RegCloseKey(hKey); 134 | } 135 | return lr; 136 | } 137 | 138 | int* SortTEMethod(TEmethod *method, int nCount) 139 | { 140 | int *pi = new int[nCount]; 141 | 142 | for (int j = 0; j < nCount; j++) { 143 | BSTR bs = method[j].name; 144 | int nMin = 0; 145 | int nMax = j - 1; 146 | int nIndex; 147 | while (nMin <= nMax) { 148 | nIndex = (nMin + nMax) / 2; 149 | if (lstrcmpi(bs, method[pi[nIndex]].name) < 0) { 150 | nMax = nIndex - 1; 151 | } else { 152 | nMin = nIndex + 1; 153 | } 154 | } 155 | for (int i = j; i > nMin; i--) { 156 | pi[i] = pi[i - 1]; 157 | } 158 | pi[nMin] = j; 159 | } 160 | return pi; 161 | } 162 | 163 | int teBSearch(TEmethod *method, int nSize, int* pMap, LPOLESTR bs) 164 | { 165 | int nMin = 0; 166 | int nMax = nSize - 1; 167 | int nIndex, nCC; 168 | 169 | while (nMin <= nMax) { 170 | nIndex = (nMin + nMax) / 2; 171 | nCC = lstrcmpi(bs, method[pMap[nIndex]].name); 172 | if (nCC < 0) { 173 | nMax = nIndex - 1; 174 | continue; 175 | } 176 | if (nCC > 0) { 177 | nMin = nIndex + 1; 178 | continue; 179 | } 180 | return pMap[nIndex]; 181 | } 182 | return -1; 183 | } 184 | 185 | HRESULT teGetDispId(TEmethod *method, int nCount, int* pMap, LPOLESTR bs, DISPID *rgDispId) 186 | { 187 | if (pMap) { 188 | int nIndex = teBSearch(method, nCount, pMap, bs); 189 | if (nIndex >= 0) { 190 | *rgDispId = method[nIndex].id; 191 | return S_OK; 192 | } 193 | } else { 194 | for (int i = 0; method[i].name; i++) { 195 | if (lstrcmpi(bs, method[i].name) == 0) { 196 | *rgDispId = method[i].id; 197 | return S_OK; 198 | } 199 | } 200 | } 201 | return DISP_E_UNKNOWNNAME; 202 | } 203 | 204 | int GetIntFromVariant(VARIANT *pv) 205 | { 206 | if (pv) { 207 | if (pv->vt == (VT_VARIANT | VT_BYREF)) { 208 | return GetIntFromVariant(pv->pvarVal); 209 | } 210 | if (pv->vt == VT_I4) { 211 | return pv->lVal; 212 | } 213 | if (pv->vt == VT_UI4) { 214 | return pv->ulVal; 215 | } 216 | if (pv->vt == VT_R8) { 217 | return (int)(LONGLONG)pv->dblVal; 218 | } 219 | VARIANT vo; 220 | VariantInit(&vo); 221 | if SUCCEEDED(VariantChangeType(&vo, pv, 0, VT_I4)) { 222 | return vo.lVal; 223 | } 224 | if SUCCEEDED(VariantChangeType(&vo, pv, 0, VT_UI4)) { 225 | return vo.ulVal; 226 | } 227 | if SUCCEEDED(VariantChangeType(&vo, pv, 0, VT_I8)) { 228 | return (int)vo.llVal; 229 | } 230 | } 231 | return 0; 232 | } 233 | 234 | int GetIntFromVariantClear(VARIANT *pv) 235 | { 236 | int i = GetIntFromVariant(pv); 237 | VariantClear(pv); 238 | return i; 239 | } 240 | 241 | LONGLONG GetLLFromVariant(VARIANT *pv) 242 | { 243 | if (pv) { 244 | if (pv->vt == (VT_VARIANT | VT_BYREF)) { 245 | return GetLLFromVariant(pv->pvarVal); 246 | } 247 | if (pv->vt == VT_I4) { 248 | return pv->lVal; 249 | } 250 | if (pv->vt == VT_R8) { 251 | return (LONGLONG)pv->dblVal; 252 | } 253 | VARIANT vo; 254 | VariantInit(&vo); 255 | if SUCCEEDED(VariantChangeType(&vo, pv, 0, VT_I8)) { 256 | return vo.llVal; 257 | } 258 | } 259 | return 0; 260 | } 261 | 262 | VOID teSetLong(VARIANT *pv, LONG i) 263 | { 264 | if (pv) { 265 | pv->lVal = i; 266 | pv->vt = VT_I4; 267 | } 268 | } 269 | 270 | VOID teSetLL(VARIANT *pv, LONGLONG ll) 271 | { 272 | if (pv) { 273 | pv->lVal = static_cast(ll); 274 | if (ll == static_cast(pv->lVal)) { 275 | pv->vt = VT_I4; 276 | return; 277 | } 278 | pv->dblVal = static_cast(ll); 279 | if (ll == static_cast(pv->dblVal)) { 280 | pv->vt = VT_R8; 281 | return; 282 | } 283 | pv->llVal = ll; 284 | pv->vt = VT_I8; 285 | } 286 | } 287 | 288 | VARIANTARG* GetNewVARIANT(int n) 289 | { 290 | VARIANT *pv = new VARIANTARG[n]; 291 | while (n--) { 292 | VariantInit(&pv[n]); 293 | } 294 | return pv; 295 | } 296 | 297 | BOOL FindUnknown(VARIANT *pv, IUnknown **ppunk) 298 | { 299 | if (pv) { 300 | if (pv->vt == VT_DISPATCH || pv->vt == VT_UNKNOWN) { 301 | *ppunk = pv->punkVal; 302 | return *ppunk != NULL; 303 | } 304 | if (pv->vt == (VT_VARIANT | VT_BYREF)) { 305 | return FindUnknown(pv->pvarVal, ppunk); 306 | } 307 | if (pv->vt == (VT_DISPATCH | VT_BYREF) || pv->vt == (VT_UNKNOWN | VT_BYREF)) { 308 | *ppunk = *pv->ppunkVal; 309 | return *ppunk != NULL; 310 | } 311 | } 312 | *ppunk = NULL; 313 | return false; 314 | } 315 | 316 | HRESULT teCLSIDFromProgID(__in LPCOLESTR lpszProgID, __out LPCLSID lpclsid) 317 | { 318 | if (StrCmpNI(lpszProgID, L"new:", 4) == 0) { 319 | return CLSIDFromString(&lpszProgID[4], lpclsid); 320 | } 321 | return CLSIDFromProgID(lpszProgID, lpclsid); 322 | } 323 | 324 | HRESULT Invoke5(IDispatch *pdisp, DISPID dispid, WORD wFlags, VARIANT *pvResult, int nArgs, VARIANTARG *pvArgs) 325 | { 326 | HRESULT hr; 327 | 328 | int i; 329 | // DISPPARAMS 330 | DISPPARAMS dispParams; 331 | dispParams.rgvarg = pvArgs; 332 | dispParams.cArgs = abs(nArgs); 333 | DISPID dispidName = DISPID_PROPERTYPUT; 334 | if (wFlags & DISPATCH_PROPERTYPUT) { 335 | dispParams.cNamedArgs = 1; 336 | dispParams.rgdispidNamedArgs = &dispidName; 337 | } else { 338 | dispParams.rgdispidNamedArgs = NULL; 339 | dispParams.cNamedArgs = 0; 340 | } 341 | try { 342 | hr = pdisp->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, 343 | wFlags, &dispParams, pvResult, NULL, NULL); 344 | } catch (...) { 345 | hr = E_FAIL; 346 | } 347 | // VARIANT Clean-up of an array 348 | if (pvArgs && nArgs >= 0) { 349 | for (i = nArgs - 1; i >= 0; i--){ 350 | VariantClear(&pvArgs[i]); 351 | } 352 | delete[] pvArgs; 353 | pvArgs = NULL; 354 | } 355 | return hr; 356 | } 357 | 358 | HRESULT Invoke4(IDispatch *pdisp, VARIANT *pvResult, int nArgs, VARIANTARG *pvArgs) 359 | { 360 | return Invoke5(pdisp, DISPID_VALUE, DISPATCH_METHOD, pvResult, nArgs, pvArgs); 361 | } 362 | 363 | BOOL teSetObject(VARIANT *pv, PVOID pObj) 364 | { 365 | if (pObj) { 366 | try { 367 | IUnknown *punk = static_cast(pObj); 368 | if SUCCEEDED(punk->QueryInterface(IID_PPV_ARGS(&pv->pdispVal))) { 369 | pv->vt = VT_DISPATCH; 370 | return true; 371 | } 372 | if SUCCEEDED(punk->QueryInterface(IID_PPV_ARGS(&pv->punkVal))) { 373 | pv->vt = VT_UNKNOWN; 374 | return true; 375 | } 376 | } catch (...) {} 377 | } 378 | return false; 379 | } 380 | 381 | VOID teVariantChangeType(__out VARIANTARG * pvargDest, 382 | __in const VARIANTARG * pvarSrc, __in VARTYPE vt) 383 | { 384 | VariantInit(pvargDest); 385 | if FAILED(VariantChangeType(pvargDest, pvarSrc, 0, vt)) { 386 | pvargDest->llVal = 0; 387 | } 388 | } 389 | 390 | static void threadTimer(void *args) 391 | { 392 | ::OleInitialize(NULL); 393 | TETimer *pCommon = (TETimer *)args; 394 | try { 395 | BOOL bAbort = FALSE; 396 | if (WaitForSingleObject(pCommon->hEvent, pCommon->lTimeout) == WAIT_TIMEOUT) { 397 | bAbort = MessageBox(NULL, L"Timeout!\nDo you want to stop?", TITLE, MB_YESNO) == IDYES; 398 | } 399 | if (::InterlockedDecrement(&pCommon->cRef)) { 400 | if (bAbort) { 401 | IActiveScript *pActiveScript; 402 | if SUCCEEDED(CoGetInterfaceAndReleaseStream(pCommon->pStream, IID_PPV_ARGS(&pActiveScript))) { 403 | EXCEPINFO ei; 404 | HRESULT hr = pActiveScript->InterruptScriptThread(SCRIPTTHREADID_ALL, &ei, SCRIPTINTERRUPT_RAISEEXCEPTION); 405 | pActiveScript->Release(); 406 | TCHAR szDebug[256]; 407 | wsprintf(szDebug, TEXT("Tablacus Script Abort: %x\n"), hr); 408 | ::OutputDebugString(szDebug); 409 | } 410 | } else { 411 | pCommon->pStream->Release(); 412 | } 413 | } else { 414 | CloseHandle(pCommon->hEvent); 415 | pCommon->pStream->Release(); 416 | delete pCommon; 417 | } 418 | } catch (...) { 419 | } 420 | ::OleUninitialize(); 421 | ::_endthread(); 422 | } 423 | 424 | // CTScriptControl 425 | 426 | CTScriptControl::CTScriptControl() 427 | { 428 | ITypeLib *pTypeLib; 429 | 430 | m_cRef = 1; 431 | Clear(); 432 | m_bsLang = NULL; 433 | m_pClientSite = NULL; 434 | m_pTypeInfo = NULL; 435 | m_pEventSink = NULL; 436 | m_pEI = NULL; 437 | if SUCCEEDED(LoadRegTypeLib(LIBID_TScriptControl, 1, 0, 0, &pTypeLib)) { 438 | pTypeLib->GetTypeInfoOfGuid(IID_IScriptControl, &m_pTypeInfo); 439 | pTypeLib->Release(); 440 | } 441 | m_pError = new CTScriptError(); 442 | LockModule(TRUE); 443 | } 444 | 445 | CTScriptControl::~CTScriptControl() 446 | { 447 | m_pEI = NULL; 448 | teSysFreeString(&m_bsLang); 449 | raw_Reset(); 450 | SafeRelease(&m_pClientSite); 451 | SafeRelease(&m_pTypeInfo); 452 | SafeRelease(&m_pError); 453 | SafeRelease(&m_pEventSink); 454 | LockModule(FALSE); 455 | } 456 | 457 | HRESULT CTScriptControl::Exec(BSTR Expression,VARIANT * pvarResult, DWORD dwFlags) 458 | { 459 | m_hr = S_OK; 460 | if (m_pActiveScript) { 461 | TETimer *pCommon = NULL; 462 | if (m_lTimeout) { 463 | IStream *pStream; 464 | if SUCCEEDED(CoMarshalInterThreadInterfaceInStream(IID_IActiveScript, m_pActiveScript, &pStream)) { 465 | pCommon = new TETimer[1]; 466 | pCommon->pStream = pStream; 467 | pCommon->cRef = 2; 468 | pCommon->hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); 469 | pCommon->lTimeout = m_lTimeout; 470 | _beginthread(&threadTimer, 0, pCommon); 471 | } 472 | } 473 | IActiveScriptParse *pasp; 474 | if SUCCEEDED(m_pActiveScript->QueryInterface(IID_PPV_ARGS(&pasp))) { 475 | if (pasp->ParseScriptText(Expression, NULL, NULL, NULL, 0, 1, dwFlags, pvarResult, NULL) == S_OK) { 476 | m_pActiveScript->SetScriptState(SCRIPTSTATE_CONNECTED); 477 | } 478 | pasp->Release(); 479 | } 480 | if (pCommon) { 481 | if (::InterlockedDecrement(&pCommon->cRef)) { 482 | SetEvent(pCommon->hEvent); 483 | } else { 484 | CloseHandle(pCommon->hEvent); 485 | delete pCommon; 486 | } 487 | } 488 | } else { 489 | ParseScript(Expression, m_bsLang, m_pObjectEx, &m_pCode, &m_pActiveScript, pvarResult, dwFlags); 490 | } 491 | return m_hr; 492 | } 493 | 494 | HRESULT CTScriptControl::ParseScript(LPOLESTR lpScript, LPOLESTR lpLang, IDispatchEx *pdex, IDispatch **ppdisp, IActiveScript **ppas, VARIANT *pvarResult, DWORD dwFlags) 495 | { 496 | HRESULT hr = E_FAIL; 497 | CLSID clsid; 498 | IActiveScript *pas = NULL; 499 | if (PathMatchSpec(lpLang, L"J*Script9")) { 500 | CoCreateInstance(CLSID_JScriptChakra, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&pas)); 501 | } 502 | if (pas == NULL && teCLSIDFromProgID(lpLang, &clsid) == S_OK) { 503 | CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&pas)); 504 | } 505 | if (pas) { 506 | IActiveScriptProperty *paspr; 507 | if SUCCEEDED(pas->QueryInterface(IID_PPV_ARGS(&paspr))) { 508 | VARIANT v; 509 | VariantInit(&v); 510 | v.vt = VT_I4; 511 | v.lVal = 0; 512 | while (++v.lVal <= 256 && paspr->SetProperty(SCRIPTPROP_INVOKEVERSIONING, NULL, &v) == S_OK) { 513 | } 514 | } 515 | CteActiveScriptSite *pass = new CteActiveScriptSite(pdex, this); 516 | pas->SetScriptSite(pass); 517 | TETimer *pCommon = NULL; 518 | if (m_lTimeout) { 519 | IStream *pStream; 520 | if SUCCEEDED(CoMarshalInterThreadInterfaceInStream(IID_IActiveScript, pas, &pStream)) { 521 | pCommon = new TETimer[1]; 522 | pCommon->pStream = pStream; 523 | pCommon->cRef = 2; 524 | pCommon->hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); 525 | pCommon->lTimeout = m_lTimeout; 526 | _beginthread(&threadTimer, 0, pCommon); 527 | } 528 | } 529 | IActiveScriptParse *pasp; 530 | if SUCCEEDED(pas->QueryInterface(IID_PPV_ARGS(&pasp))) { 531 | hr = pasp->InitNew(); 532 | if (pdex) { 533 | DISPID dispid; 534 | HRESULT hr = pdex->GetNextDispID(fdexEnumAll, DISPID_STARTENUM, &dispid); 535 | while (hr == NOERROR) { 536 | BSTR bs; 537 | if (pdex->GetMemberName(dispid, &bs) == S_OK) { 538 | DWORD dwFlags = SCRIPTITEM_ISPERSISTENT | SCRIPTITEM_ISVISIBLE; 539 | DISPPARAMS noargs = { NULL, NULL, 0, 0 }; 540 | VARIANT v; 541 | VariantInit(&v); 542 | if (pdex->InvokeEx(dispid, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &noargs, &v, NULL, NULL) == S_OK) { 543 | IUnknown *punk; 544 | if (FindUnknown(&v, &punk)) { 545 | CTScriptObject *pSO; 546 | if SUCCEEDED(punk->QueryInterface(g_ClsIdScriptObject, (LPVOID *)&pSO)) { 547 | if (pSO->m_bAddMembers) { 548 | dwFlags = SCRIPTITEM_ISVISIBLE | SCRIPTITEM_ISSOURCE | SCRIPTITEM_GLOBALMEMBERS; 549 | } 550 | pSO->Release(); 551 | } 552 | } 553 | } 554 | VariantClear(&v); 555 | pas->AddNamedItem(bs, dwFlags); 556 | ::SysFreeString(bs); 557 | } 558 | hr = pdex->GetNextDispID(fdexEnumAll, dispid, &dispid); 559 | } 560 | } 561 | VARIANT v; 562 | VariantInit(&v); 563 | hr = pasp->ParseScriptText(lpScript, NULL, NULL, NULL, 0, 1, dwFlags, pvarResult, NULL); 564 | if (hr == S_OK) { 565 | pas->SetScriptState(SCRIPTSTATE_CONNECTED); 566 | if (ppdisp) { 567 | IDispatch *pdisp; 568 | if (pas->GetScriptDispatch(NULL, &pdisp) == S_OK) { 569 | CteDispatch *odisp = new CteDispatch(pdisp, 2); 570 | pdisp->Release(); 571 | if SUCCEEDED(pas->QueryInterface(IID_PPV_ARGS(&odisp->m_pActiveScript))) { 572 | odisp->QueryInterface(IID_PPV_ARGS(ppdisp)); 573 | } 574 | odisp->Release(); 575 | } 576 | } 577 | } 578 | pasp->Release(); 579 | //pass->m_pSC = NULL; 580 | if (pass->m_hr != S_OK) { 581 | hr = pass->m_hr; 582 | } 583 | pass->Release(); 584 | } 585 | if (!ppdisp || !*ppdisp) { 586 | pas->SetScriptState(SCRIPTSTATE_CLOSED); 587 | pas->Close(); 588 | } 589 | if (pCommon) { 590 | if (::InterlockedDecrement(&pCommon->cRef)) { 591 | SetEvent(pCommon->hEvent); 592 | } else { 593 | CloseHandle(pCommon->hEvent); 594 | delete pCommon; 595 | } 596 | } 597 | if (ppas) { 598 | *ppas = pas; 599 | } else { 600 | pas->Release(); 601 | } 602 | } 603 | return hr; 604 | } 605 | 606 | STDMETHODIMP CTScriptControl::QueryInterface(REFIID riid, void **ppvObject) 607 | { 608 | #pragma warning(push) 609 | #pragma warning(disable:4838) 610 | static const QITAB qit[] = 611 | { 612 | QITABENT(CTScriptControl, IDispatch), 613 | QITABENT(CTScriptControl, IScriptControl), 614 | &DIID_DScriptControlSource, OFFSETOFCLASS(IScriptControl, CTScriptControl), 615 | &CLSID_TScriptServer, OFFSETOFCLASS(IScriptControl, CTScriptControl), 616 | QITABENT(CTScriptControl, IOleObject), 617 | QITABENT(CTScriptControl, IOleControl), 618 | QITABENT(CTScriptControl, IPersistStreamInit), 619 | QITABENT(CTScriptControl, IConnectionPointContainer), 620 | QITABENT(CTScriptControl, IConnectionPoint), 621 | { 0 }, 622 | }; 623 | #pragma warning(pop) 624 | return QISearch(this, qit, riid, ppvObject); 625 | } 626 | 627 | STDMETHODIMP_(ULONG) CTScriptControl::AddRef() 628 | { 629 | return InterlockedIncrement(&m_cRef); 630 | } 631 | 632 | STDMETHODIMP_(ULONG) CTScriptControl::Release() 633 | { 634 | if (InterlockedDecrement(&m_cRef) == 0) { 635 | delete this; 636 | return 0; 637 | } 638 | 639 | return m_cRef; 640 | } 641 | 642 | STDMETHODIMP CTScriptControl::GetTypeInfoCount(UINT *pctinfo) 643 | { 644 | *pctinfo = m_pTypeInfo ? 1 : 0; 645 | return S_OK; 646 | } 647 | 648 | STDMETHODIMP CTScriptControl::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) 649 | { 650 | if (m_pTypeInfo) { 651 | m_pTypeInfo->AddRef(); 652 | *ppTInfo = m_pTypeInfo; 653 | return S_OK; 654 | } 655 | return E_NOTIMPL; 656 | } 657 | 658 | STDMETHODIMP CTScriptControl::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) 659 | { 660 | return teGetDispId(methodTSC, _countof(methodTSC), g_map, *rgszNames, rgDispId); 661 | } 662 | 663 | STDMETHODIMP CTScriptControl::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) 664 | { 665 | int nArg = pDispParams ? pDispParams->cArgs - 1 : -1; 666 | VARIANT v; VariantInit(&v); 667 | HRESULT hr = S_OK; 668 | 669 | // used by CteActiveScriptSite::OnScriptError to pass info to our caller 670 | m_pEI = pExcepInfo; 671 | 672 | switch (dispIdMember) { 673 | //Language 674 | case 1500: 675 | if (nArg >= 0) { 676 | teVariantChangeType(&v, &pDispParams->rgvarg[nArg], VT_BSTR); 677 | hr = put_Language(v.bstrVal); 678 | VariantClear(&v); 679 | } 680 | if (pVarResult) { 681 | hr = get_Language(&pVarResult->bstrVal); 682 | pVarResult->vt = VT_BSTR; 683 | } 684 | break; 685 | //State 686 | case 1501: 687 | if (nArg >= 0) { 688 | hr = put_State((ScriptControlStates)GetIntFromVariant(&pDispParams->rgvarg[nArg])); 689 | } 690 | if (pVarResult) { 691 | hr = get_State((ScriptControlStates *)&pVarResult->lVal); 692 | pVarResult->vt = VT_I4; 693 | } 694 | break; 695 | //SitehWnd 696 | case 1502: 697 | if (nArg >= 0) { 698 | m_hwnd.ll = GetLLFromVariant(&pDispParams->rgvarg[nArg]); 699 | } 700 | teSetLL(pVarResult, m_hwnd.ll); 701 | break; 702 | //Timeout 703 | case 1503: 704 | if (nArg >= 0) { 705 | hr = put_Timeout(GetIntFromVariant(&pDispParams->rgvarg[nArg])); 706 | } 707 | if (pVarResult) { 708 | hr = get_Timeout(&pVarResult->lVal); 709 | pVarResult->vt = VT_I4; 710 | } 711 | break; 712 | //AllowUI 713 | case 1504: 714 | if (nArg >= 0) { 715 | hr = put_AllowUI(GetIntFromVariant(&pDispParams->rgvarg[nArg])); 716 | } 717 | if (pVarResult) { 718 | hr = get_AllowUI(&pVarResult->boolVal); 719 | pVarResult->vt = VT_BOOL; 720 | } 721 | break; 722 | //UseSafeSubset 723 | case 1505: 724 | if (nArg >= 0) { 725 | hr = put_UseSafeSubset(GetIntFromVariant(&pDispParams->rgvarg[nArg])); 726 | } 727 | if (pVarResult) { 728 | hr = get_UseSafeSubset(&pVarResult->boolVal); 729 | pVarResult->vt = VT_BOOL; 730 | } 731 | break; 732 | //Modules 733 | case 1506: 734 | hr = E_NOTIMPL; 735 | break; 736 | //Error 737 | case 1507: 738 | teSetObject(pVarResult, m_pError); 739 | hr = S_OK; 740 | break; 741 | //CodeObject 742 | case 1000: 743 | if (pVarResult && m_pCode) { 744 | if SUCCEEDED(m_pCode->QueryInterface(IID_PPV_ARGS(&pVarResult->pdispVal))) { 745 | pVarResult->vt = VT_DISPATCH; 746 | } 747 | } 748 | hr = S_OK; 749 | break; 750 | //Procedures 751 | case 1001: 752 | hr = E_NOTIMPL; 753 | break; 754 | //_AboutBox 755 | case -552: 756 | hr = raw__AboutBox(); 757 | break; 758 | //AddObject 759 | case 2500: 760 | if (nArg >= 1) { 761 | teVariantChangeType(&v, &pDispParams->rgvarg[nArg], VT_BSTR); 762 | IUnknown *punk; 763 | if (FindUnknown(&pDispParams->rgvarg[nArg - 1], &punk)) { 764 | IDispatch *pdisp; 765 | if SUCCEEDED(punk->QueryInterface(IID_PPV_ARGS(&pdisp))) { 766 | hr = raw_AddObject(v.bstrVal, pdisp, nArg >= 2 && GetIntFromVariant(&pDispParams->rgvarg[nArg - 2])); 767 | pdisp->Release(); 768 | } 769 | } 770 | } 771 | break; 772 | //Reset 773 | case 2501: 774 | hr = raw_Reset(); 775 | break; 776 | //AddCode 777 | case 2000: 778 | if (nArg >= 0) { 779 | teVariantChangeType(&v, &pDispParams->rgvarg[nArg], VT_BSTR); 780 | hr = raw_AddCode(v.bstrVal); 781 | VariantClear(&v); 782 | } 783 | break; 784 | //Eval 785 | case 2001: 786 | if (nArg >= 0) { 787 | teVariantChangeType(&v, &pDispParams->rgvarg[nArg], VT_BSTR); 788 | hr = raw_Eval(v.bstrVal, pVarResult); 789 | VariantClear(&v); 790 | } 791 | break; 792 | //ExecuteStatement 793 | case 2002: 794 | if (nArg >= 0) { 795 | teVariantChangeType(&v, &pDispParams->rgvarg[nArg], VT_BSTR); 796 | hr = raw_ExecuteStatement(v.bstrVal); 797 | VariantClear(&v); 798 | } 799 | break; 800 | //Run 801 | case 2003: 802 | if (nArg >= 0) { 803 | teVariantChangeType(&v, &pDispParams->rgvarg[nArg], VT_BSTR); 804 | SAFEARRAY *psa = NULL; 805 | VARIANT *pv; 806 | if (nArg >= 1) { 807 | psa = ::SafeArrayCreateVector(VT_VARIANT, 0, nArg); 808 | if (::SafeArrayAccessData(psa, (LPVOID *)&pv) == S_OK) { 809 | for (int i = nArg; i--;) { 810 | ::VariantCopy(&pv[i], &pDispParams->rgvarg[nArg - i - 1]); 811 | } 812 | ::SafeArrayUnaccessData(psa); 813 | } 814 | } 815 | hr = raw_Run(v.bstrVal, &psa, pVarResult); 816 | if (psa) { 817 | ::SafeArrayDestroy(psa); 818 | } 819 | VariantClear(&v); 820 | } 821 | break; 822 | //DIID_DScriptControlSource 823 | /* case 3000://Error 824 | case 3001://Timeout 825 | if (m_pEventSink) { 826 | hr = m_pEventSink->Invoke(dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); 827 | } else { 828 | hr = DISP_E_MEMBERNOTFOUND; 829 | } 830 | break;*/ 831 | 832 | case DISPID_VALUE://this 833 | teSetObject(pVarResult, this); 834 | hr = S_OK; 835 | break; 836 | default: 837 | hr = DISP_E_MEMBERNOTFOUND; 838 | break; 839 | }//end_switch 840 | 841 | // no more caller for CteActiveScriptSite::OnScriptError 842 | m_pEI = NULL; 843 | return hr; 844 | } 845 | 846 | STDMETHODIMP CTScriptControl::get_Language(BSTR * pbstrLanguage) 847 | { 848 | *pbstrLanguage = ::SysAllocString(m_bsLang); 849 | return S_OK; 850 | } 851 | 852 | STDMETHODIMP CTScriptControl::put_Language(BSTR pbstrLanguage) 853 | { 854 | teSysFreeString(&m_bsLang); 855 | m_bsLang = ::SysAllocString(pbstrLanguage); 856 | return S_OK; 857 | } 858 | 859 | STDMETHODIMP CTScriptControl::get_State(enum ScriptControlStates *pssState) 860 | { 861 | return m_pActiveScript ? m_pActiveScript->GetScriptState((SCRIPTSTATE *)pssState) : E_FAIL; 862 | } 863 | 864 | STDMETHODIMP CTScriptControl::put_State(enum ScriptControlStates ssState) 865 | { 866 | return m_pActiveScript ? m_pActiveScript->SetScriptState((SCRIPTSTATE)ssState) : E_FAIL; 867 | } 868 | 869 | STDMETHODIMP CTScriptControl::put_SitehWnd(long hwnd) 870 | { 871 | m_hwnd.l[0] = hwnd; 872 | m_hwnd.l[1] = 0; 873 | return S_OK; 874 | } 875 | 876 | STDMETHODIMP CTScriptControl::get_SitehWnd(long *phwnd) 877 | { 878 | *phwnd = m_hwnd.l[0]; 879 | return m_hwnd.l[1] ? E_HANDLE : S_OK; 880 | } 881 | 882 | STDMETHODIMP CTScriptControl::get_Timeout(long *plMilleseconds) 883 | { 884 | *plMilleseconds = m_lTimeout; 885 | return S_OK; 886 | } 887 | 888 | STDMETHODIMP CTScriptControl::put_Timeout(long lMilleseconds) 889 | { 890 | m_lTimeout = lMilleseconds; 891 | return S_OK; 892 | } 893 | 894 | STDMETHODIMP CTScriptControl::get_AllowUI(VARIANT_BOOL * pfAllowUI) 895 | { 896 | *pfAllowUI = m_fAllowUI; 897 | return S_OK; 898 | } 899 | 900 | STDMETHODIMP CTScriptControl::put_AllowUI(VARIANT_BOOL fAllowUI) 901 | { 902 | m_fAllowUI = fAllowUI; 903 | return S_OK; 904 | } 905 | 906 | STDMETHODIMP CTScriptControl::get_UseSafeSubset(VARIANT_BOOL * pfUseSafeSubset) 907 | { 908 | *pfUseSafeSubset = m_fUseSafeSubset; 909 | return S_OK; 910 | } 911 | 912 | STDMETHODIMP CTScriptControl::put_UseSafeSubset(VARIANT_BOOL pfUseSafeSubset) 913 | { 914 | m_fUseSafeSubset = pfUseSafeSubset; 915 | return S_OK; 916 | } 917 | 918 | STDMETHODIMP CTScriptControl::get_Modules(struct IScriptModuleCollection ** ppmods) 919 | { 920 | return E_NOTIMPL; 921 | } 922 | 923 | STDMETHODIMP CTScriptControl::get_Error(struct IScriptError ** ppse) 924 | { 925 | *ppse = m_pError; 926 | m_pError->AddRef(); 927 | return S_OK; 928 | } 929 | 930 | STDMETHODIMP CTScriptControl::get_CodeObject(IDispatch ** ppdispObject) 931 | { 932 | return m_pCode->QueryInterface(IID_PPV_ARGS(ppdispObject)); 933 | } 934 | 935 | STDMETHODIMP CTScriptControl::get_Procedures(struct IScriptProcedureCollection ** ppdispProcedures) 936 | { 937 | return E_NOTIMPL; 938 | } 939 | 940 | STDMETHODIMP CTScriptControl::raw__AboutBox() 941 | { 942 | MessageBox(NULL, _T(PRODUCTNAME) L" Version " _T(STRING(VER_Y)) L"." _T(STRING(VER_M)) L"." _T(STRING(VER_D)) L"." _T(STRING(VER_Z)), TITLE, MB_ICONINFORMATION | MB_OK); 943 | return S_OK; 944 | } 945 | 946 | STDMETHODIMP CTScriptControl::raw_AddObject(BSTR Name, IDispatch * Object, VARIANT_BOOL AddMembers) 947 | { 948 | VARIANT v; 949 | DISPID dispid; 950 | if (m_pObjectEx == NULL) { 951 | //Get JScript Object 952 | LPOLESTR lp = L"function o(){return {}}"; 953 | if (ParseScript(lp, L"JScript", NULL, &m_pJS, NULL, NULL, SCRIPTTEXT_ISPERSISTENT | SCRIPTTEXT_ISVISIBLE) == S_OK) { 954 | lp = L"o"; 955 | VariantInit(&v); 956 | if (m_pJS->GetIDsOfNames(IID_NULL, &lp, 1, LOCALE_USER_DEFAULT, &dispid) == S_OK) { 957 | if (Invoke5(m_pJS, dispid, DISPATCH_PROPERTYGET, &v, 0, NULL) == S_OK) { 958 | m_pObject = v.pdispVal; 959 | v.vt = VT_EMPTY; 960 | if (Invoke4(m_pObject, &v, 0, NULL) == S_OK) { 961 | v.pdispVal->QueryInterface(IID_PPV_ARGS(&m_pObjectEx)); 962 | } 963 | } 964 | } 965 | } 966 | VariantClear(&v); 967 | } 968 | if (m_pObjectEx->GetDispID(Name, fdexNameEnsure, &dispid) == S_OK) { 969 | v.punkVal = new CTScriptObject(Object, AddMembers); 970 | v.vt = VT_UNKNOWN; 971 | DISPID dispidName = DISPID_PROPERTYPUT; 972 | DISPPARAMS args; 973 | args.cArgs = 1; 974 | args.cNamedArgs = 1; 975 | args.rgdispidNamedArgs = &dispidName; 976 | args.rgvarg = &v; 977 | m_pObjectEx->InvokeEx(dispid, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUTREF, &args, NULL, NULL,NULL); 978 | } 979 | return S_OK; 980 | } 981 | 982 | VOID CTScriptControl::Clear() 983 | { 984 | m_pActiveScript = NULL; 985 | m_pJS = NULL; 986 | m_pObject = NULL; 987 | m_pObjectEx = NULL; 988 | m_pCode = NULL; 989 | m_hwnd.hwnd = NULL; 990 | m_fAllowUI = VARIANT_TRUE; 991 | m_fUseSafeSubset = VARIANT_FALSE; 992 | m_lTimeout = 0; 993 | } 994 | 995 | HRESULT CTScriptControl::SetScriptError(int n) 996 | { 997 | HRESULT hr = E_UNEXPECTED; 998 | WCHAR pszBuff[4096]; 999 | if (m_pEI) { 1000 | lstrcpy(pszBuff, L"%SystemRoot%\\SysWOW64\\msscript.ocx"); 1001 | ExpandEnvironmentStrings(pszBuff, pszBuff, 4096); 1002 | HMODULE hLib = LoadLibraryEx(pszBuff, NULL, LOAD_LIBRARY_AS_DATAFILE); 1003 | if (hLib) { 1004 | if (LoadString(hLib, n, pszBuff, 4096)) { 1005 | m_pEI->bstrDescription = ::SysAllocString(pszBuff); 1006 | m_pEI->bstrSource = ::SysAllocString(TITLE); 1007 | m_pEI->scode = E_FAIL; 1008 | } 1009 | FreeLibrary(hLib); 1010 | } 1011 | hr = DISP_E_EXCEPTION; 1012 | } 1013 | return hr; 1014 | } 1015 | 1016 | STDMETHODIMP CTScriptControl::raw_Reset() 1017 | { 1018 | SafeRelease(&m_pCode); 1019 | SafeRelease(&m_pObjectEx); 1020 | SafeRelease(&m_pObject); 1021 | SafeRelease(&m_pJS); 1022 | SafeRelease(&m_pActiveScript); 1023 | SafeRelease(&m_pEventSink); 1024 | Clear(); 1025 | m_pError->raw_Clear(); 1026 | return m_bsLang ? S_OK : SetScriptError(1024); 1027 | } 1028 | 1029 | STDMETHODIMP CTScriptControl::raw_AddCode(BSTR Code) 1030 | { 1031 | return Exec(Code, NULL, SCRIPTTEXT_ISPERSISTENT | SCRIPTTEXT_ISVISIBLE); 1032 | } 1033 | 1034 | STDMETHODIMP CTScriptControl::raw_Eval(BSTR Expression, VARIANT *pvarResult) 1035 | { 1036 | return Exec(Expression, pvarResult, SCRIPTTEXT_ISEXPRESSION); 1037 | } 1038 | 1039 | STDMETHODIMP CTScriptControl::raw_ExecuteStatement(BSTR Statement) 1040 | { 1041 | return Exec(Statement, NULL, SCRIPTTEXT_ISPERSISTENT); 1042 | } 1043 | 1044 | STDMETHODIMP CTScriptControl::raw_Run(BSTR ProcedureName, SAFEARRAY ** Parameters, VARIANT *pvarResult) 1045 | { 1046 | m_hr = S_OK; 1047 | VARIANT *pv; 1048 | VARIANT *pv2 = NULL; 1049 | long nArg = 0; 1050 | if (*Parameters) { 1051 | ::SafeArrayGetUBound(*Parameters, 1, &nArg); 1052 | nArg++; 1053 | if (nArg) { 1054 | pv2 = GetNewVARIANT(nArg); 1055 | if (::SafeArrayAccessData(*Parameters, (LPVOID *)&pv) == S_OK) { 1056 | for (int i = nArg; i--;) { 1057 | pv2[nArg - i - 1] = pv[i]; 1058 | } 1059 | ::SafeArrayUnaccessData(*Parameters); 1060 | } 1061 | } 1062 | } 1063 | DISPID dispid; 1064 | HRESULT hr = m_pCode->GetIDsOfNames(IID_NULL, &ProcedureName, 1, LOCALE_USER_DEFAULT, &dispid); 1065 | if (hr == S_OK) { 1066 | Invoke5(m_pCode, dispid, DISPATCH_METHOD, pvarResult, -nArg, pv2); 1067 | } 1068 | if (pv2) { 1069 | delete [] pv2; 1070 | } 1071 | return hr ? hr : m_hr; 1072 | } 1073 | 1074 | //IOleObject 1075 | STDMETHODIMP CTScriptControl::SetClientSite(IOleClientSite *pClientSite) 1076 | { 1077 | if (pClientSite) { 1078 | SafeRelease(&m_pClientSite); 1079 | pClientSite->QueryInterface(IID_PPV_ARGS(&m_pClientSite)); 1080 | } 1081 | return S_OK; 1082 | } 1083 | 1084 | STDMETHODIMP CTScriptControl::GetClientSite(IOleClientSite **ppClientSite) 1085 | { 1086 | if (m_pClientSite) { 1087 | return m_pClientSite->QueryInterface(IID_PPV_ARGS(ppClientSite)); 1088 | } 1089 | *ppClientSite = NULL; 1090 | return S_OK; 1091 | } 1092 | 1093 | STDMETHODIMP CTScriptControl::SetHostNames(LPCOLESTR szContainerApp, LPCOLESTR szContainerObj) 1094 | { 1095 | return S_OK; 1096 | } 1097 | 1098 | STDMETHODIMP CTScriptControl::Close(DWORD dwSaveOption) 1099 | { 1100 | return S_OK; 1101 | } 1102 | 1103 | STDMETHODIMP CTScriptControl::SetMoniker(DWORD dwWhichMoniker, IMoniker *pmk) 1104 | { 1105 | return E_NOTIMPL; 1106 | } 1107 | 1108 | STDMETHODIMP CTScriptControl::GetMoniker(DWORD dwAssign, DWORD dwWhichMoniker, IMoniker **ppmk) 1109 | { 1110 | return E_NOTIMPL; 1111 | } 1112 | 1113 | STDMETHODIMP CTScriptControl::InitFromData(IDataObject *pDataObject, BOOL fCreation, DWORD dwReserved) 1114 | { 1115 | return S_OK; 1116 | } 1117 | 1118 | STDMETHODIMP CTScriptControl::GetClipboardData(DWORD dwReserved, IDataObject **ppDataObject) 1119 | { 1120 | return E_NOTIMPL; 1121 | } 1122 | 1123 | STDMETHODIMP CTScriptControl::DoVerb(LONG iVerb, LPMSG lpmsg, IOleClientSite *pActiveSite, LONG lindex, HWND hwndParent, LPCRECT lprcPosRect) 1124 | { 1125 | return S_OK; 1126 | } 1127 | 1128 | STDMETHODIMP CTScriptControl::EnumVerbs(IEnumOLEVERB **ppEnumOleVerb) 1129 | { 1130 | return E_NOTIMPL; 1131 | } 1132 | 1133 | STDMETHODIMP CTScriptControl::Update(void) 1134 | { 1135 | return S_OK; 1136 | } 1137 | 1138 | STDMETHODIMP CTScriptControl::IsUpToDate(void) 1139 | { 1140 | return E_NOTIMPL; 1141 | } 1142 | 1143 | STDMETHODIMP CTScriptControl::GetUserClassID(CLSID *pClsid) 1144 | { 1145 | return E_NOTIMPL; 1146 | } 1147 | 1148 | STDMETHODIMP CTScriptControl::GetUserType(DWORD dwFormOfType, LPOLESTR *pszUserType) 1149 | { 1150 | return E_NOTIMPL; 1151 | } 1152 | 1153 | STDMETHODIMP CTScriptControl::SetExtent(DWORD dwDrawAspect, SIZEL *psizel) 1154 | { 1155 | return E_NOTIMPL; 1156 | } 1157 | 1158 | STDMETHODIMP CTScriptControl::GetExtent(DWORD dwDrawAspect, SIZEL *psizel) 1159 | { 1160 | psizel->cx = 0; 1161 | psizel->cy = 0; 1162 | return S_OK; 1163 | } 1164 | 1165 | STDMETHODIMP CTScriptControl::Advise(IAdviseSink *pAdvSink, DWORD *pdwConnection) 1166 | { 1167 | return E_NOTIMPL; 1168 | } 1169 | /* 1170 | STDMETHODIMP CTScriptControl::Unadvise(DWORD dwConnection) 1171 | { 1172 | return E_NOTIMPL; 1173 | } 1174 | */ 1175 | STDMETHODIMP CTScriptControl::EnumAdvise(IEnumSTATDATA **ppenumAdvise) 1176 | { 1177 | return E_NOTIMPL; 1178 | } 1179 | 1180 | STDMETHODIMP CTScriptControl::GetMiscStatus(DWORD dwAspect, DWORD *pdwStatus) 1181 | { 1182 | *pdwStatus = 0; 1183 | return S_OK; 1184 | } 1185 | 1186 | STDMETHODIMP CTScriptControl::SetColorScheme(LOGPALETTE *pLogpal) 1187 | { 1188 | return E_NOTIMPL; 1189 | } 1190 | 1191 | //IPersist 1192 | STDMETHODIMP CTScriptControl::GetClassID(CLSID *pClassID) 1193 | { 1194 | return E_NOTIMPL; 1195 | } 1196 | 1197 | //IOleControl 1198 | STDMETHODIMP CTScriptControl::GetControlInfo(CONTROLINFO *pCI) 1199 | { 1200 | return E_NOTIMPL; 1201 | } 1202 | 1203 | STDMETHODIMP CTScriptControl::OnMnemonic(MSG *pMsg) 1204 | { 1205 | return S_OK; 1206 | } 1207 | 1208 | STDMETHODIMP CTScriptControl::OnAmbientPropertyChange(DISPID dispID) 1209 | { 1210 | return S_OK; 1211 | } 1212 | 1213 | STDMETHODIMP CTScriptControl::FreezeEvents(BOOL bFreeze) 1214 | { 1215 | return E_NOTIMPL; 1216 | } 1217 | 1218 | //IConnectionPointContainer 1219 | STDMETHODIMP CTScriptControl::EnumConnectionPoints(IEnumConnectionPoints **ppEnum) 1220 | { 1221 | return E_NOTIMPL; 1222 | } 1223 | 1224 | STDMETHODIMP CTScriptControl::FindConnectionPoint(REFIID riid, IConnectionPoint **ppCP) 1225 | { 1226 | return QueryInterface(IID_PPV_ARGS(ppCP)); 1227 | } 1228 | 1229 | //IConnectionPoint 1230 | STDMETHODIMP CTScriptControl::GetConnectionInterface(IID *pIID) 1231 | { 1232 | return E_NOTIMPL; 1233 | } 1234 | 1235 | STDMETHODIMP CTScriptControl::GetConnectionPointContainer(IConnectionPointContainer **ppCPC) 1236 | { 1237 | return QueryInterface(IID_PPV_ARGS(ppCPC)); 1238 | } 1239 | 1240 | STDMETHODIMP CTScriptControl::Advise(IUnknown *pUnkSink, DWORD *pdwCookie) 1241 | { 1242 | if (!pdwCookie) { 1243 | return E_POINTER; 1244 | } 1245 | SafeRelease(&m_pEventSink); 1246 | pUnkSink->QueryInterface(IID_PPV_ARGS(&m_pEventSink)); 1247 | if (m_pEventSink) { 1248 | *pdwCookie = EVENT_COOKIE; 1249 | return S_OK; 1250 | } 1251 | return E_FAIL; 1252 | } 1253 | 1254 | STDMETHODIMP CTScriptControl::Unadvise(DWORD dwCookie) 1255 | { 1256 | if (dwCookie == EVENT_COOKIE) { 1257 | SafeRelease(&m_pEventSink); 1258 | return S_OK; 1259 | } 1260 | return E_FAIL; 1261 | } 1262 | 1263 | STDMETHODIMP CTScriptControl::EnumConnections(IEnumConnections **ppEnum) 1264 | { 1265 | return E_NOTIMPL; 1266 | } 1267 | 1268 | //IPersistStreamInit 1269 | STDMETHODIMP CTScriptControl::IsDirty(void) 1270 | { 1271 | return S_OK; 1272 | } 1273 | 1274 | STDMETHODIMP CTScriptControl::Load(LPSTREAM pStm) 1275 | { 1276 | return E_NOTIMPL; 1277 | } 1278 | 1279 | STDMETHODIMP CTScriptControl::Save(LPSTREAM pStm, BOOL fClearDirty) 1280 | { 1281 | return S_OK; 1282 | } 1283 | 1284 | STDMETHODIMP CTScriptControl::GetSizeMax(ULARGE_INTEGER *pCbSize) 1285 | { 1286 | return E_NOTIMPL; 1287 | } 1288 | 1289 | STDMETHODIMP CTScriptControl::InitNew(void) 1290 | { 1291 | return S_OK; 1292 | } 1293 | 1294 | // CTScriptControlFactory 1295 | 1296 | STDMETHODIMP CTScriptControlFactory::QueryInterface(REFIID riid, void **ppvObject) 1297 | { 1298 | #pragma warning(push) 1299 | #pragma warning(disable:4838) 1300 | static const QITAB qit[] = 1301 | { 1302 | QITABENT(CTScriptControlFactory, IClassFactory), 1303 | { 0 }, 1304 | }; 1305 | #pragma warning(pop) 1306 | return QISearch(this, qit, riid, ppvObject); 1307 | } 1308 | 1309 | STDMETHODIMP_(ULONG) CTScriptControlFactory::AddRef() 1310 | { 1311 | LockModule(TRUE); 1312 | return 2; 1313 | } 1314 | 1315 | STDMETHODIMP_(ULONG) CTScriptControlFactory::Release() 1316 | { 1317 | LockModule(FALSE); 1318 | return 1; 1319 | } 1320 | 1321 | STDMETHODIMP CTScriptControlFactory::CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObject) 1322 | { 1323 | CTScriptControl *p; 1324 | HRESULT hr; 1325 | 1326 | *ppvObject = NULL; 1327 | 1328 | if (pUnkOuter != NULL) { 1329 | return CLASS_E_NOAGGREGATION; 1330 | } 1331 | p = new CTScriptControl(); 1332 | if (p == NULL) { 1333 | return E_OUTOFMEMORY; 1334 | } 1335 | hr = p->QueryInterface(riid, ppvObject); 1336 | p->Release(); 1337 | 1338 | return hr; 1339 | } 1340 | 1341 | STDMETHODIMP CTScriptControlFactory::LockServer(BOOL fLock) 1342 | { 1343 | LockModule(fLock); 1344 | return S_OK; 1345 | } 1346 | 1347 | //CTScriptObject 1348 | STDMETHODIMP CTScriptObject::QueryInterface(REFIID riid, void **ppvObject) 1349 | { 1350 | if (IsEqualIID(riid, IID_IUnknown) || IsEqualIID(riid, g_ClsIdScriptObject)) { 1351 | *ppvObject = this; 1352 | AddRef(); 1353 | return S_OK; 1354 | } 1355 | return E_NOINTERFACE; 1356 | } 1357 | 1358 | 1359 | STDMETHODIMP_(ULONG) CTScriptObject::AddRef() 1360 | { 1361 | return ::InterlockedIncrement(&m_cRef); 1362 | } 1363 | 1364 | STDMETHODIMP_(ULONG) CTScriptObject::Release() 1365 | { 1366 | if (::InterlockedDecrement(&m_cRef) == 0) { 1367 | delete this; 1368 | return 0; 1369 | } 1370 | return m_cRef; 1371 | } 1372 | 1373 | CTScriptObject::CTScriptObject(IDispatch *pObject, VARIANT_BOOL bAddMembers) 1374 | { 1375 | m_cRef = 1; 1376 | m_pObject = pObject; 1377 | m_pObject->AddRef(); 1378 | m_bAddMembers = bAddMembers; 1379 | } 1380 | 1381 | CTScriptObject::~CTScriptObject() 1382 | { 1383 | SafeRelease(&m_pObject); 1384 | } 1385 | 1386 | // DLL Export 1387 | 1388 | 1389 | STDAPI DllCanUnloadNow(void) 1390 | { 1391 | return g_lLocks == 0 ? S_OK : S_FALSE; 1392 | } 1393 | 1394 | STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) 1395 | { 1396 | static CTScriptControlFactory serverFactory; 1397 | HRESULT hr; 1398 | 1399 | *ppv = NULL; 1400 | 1401 | if (IsEqualCLSID(rclsid, CLSID_TScriptServer)) { 1402 | hr = serverFactory.QueryInterface(riid, ppv); 1403 | } else { 1404 | hr = CLASS_E_CLASSNOTAVAILABLE; 1405 | } 1406 | return hr; 1407 | } 1408 | 1409 | STDAPI DllRegisterServer(void) 1410 | { 1411 | TCHAR szModulePath[MAX_PATH]; 1412 | TCHAR szKey[256]; 1413 | 1414 | wsprintf(szKey, TEXT("CLSID\\%s"), g_szClsid); 1415 | LSTATUS lr = CreateRegistryKey(HKEY_CLASSES_ROOT, szKey, NULL, TEXT("ScriptControl Object")); 1416 | if (lr != ERROR_SUCCESS) { 1417 | return ShowRegError(lr); 1418 | } 1419 | GetModuleFileName(g_hinstDll, szModulePath, sizeof(szModulePath) / sizeof(TCHAR)); 1420 | wsprintf(szKey, TEXT("CLSID\\%s\\InprocServer32"), g_szClsid); 1421 | lr = CreateRegistryKey(HKEY_CLASSES_ROOT, szKey, NULL, szModulePath); 1422 | if (lr != ERROR_SUCCESS) { 1423 | return ShowRegError(lr); 1424 | } 1425 | lr = CreateRegistryKey(HKEY_CLASSES_ROOT, szKey, TEXT("ThreadingModel"), TEXT("Apartment")); 1426 | if (lr != ERROR_SUCCESS) { 1427 | return ShowRegError(lr); 1428 | } 1429 | wsprintf(szKey, TEXT("CLSID\\%s\\ProgID"), g_szClsid); 1430 | lr = CreateRegistryKey(HKEY_CLASSES_ROOT, szKey, NULL, const_cast(g_szProgid)); 1431 | if (lr != ERROR_SUCCESS) { 1432 | return ShowRegError(lr); 1433 | } 1434 | lr = CreateRegistryKey(HKEY_CLASSES_ROOT, const_cast(g_szProgid), NULL, TEXT(PRODUCTNAME)); 1435 | if (lr != ERROR_SUCCESS) { 1436 | return ShowRegError(lr); 1437 | } 1438 | wsprintf(szKey, TEXT("%s\\CLSID"), g_szProgid); 1439 | lr = CreateRegistryKey(HKEY_CLASSES_ROOT, szKey, NULL, const_cast(g_szClsid)); 1440 | if (lr != ERROR_SUCCESS) { 1441 | return ShowRegError(lr); 1442 | } 1443 | ITypeLib *pTypeLib; 1444 | HRESULT hr = LoadTypeLib(szModulePath, &pTypeLib); 1445 | if FAILED(hr) { 1446 | ShowRegError(hr); 1447 | return hr; 1448 | } 1449 | hr = RegisterTypeLib(pTypeLib, szModulePath, NULL); 1450 | pTypeLib->Release(); 1451 | if FAILED(hr) { 1452 | ShowRegError(hr); 1453 | return hr; 1454 | } 1455 | wsprintf(szKey, TEXT("CLSID\\%s\\TypeLib"), g_szClsid); 1456 | lr = CreateRegistryKey(HKEY_CLASSES_ROOT, szKey, NULL, const_cast(g_szLibid)); 1457 | if (lr != ERROR_SUCCESS) { 1458 | return ShowRegError(lr); 1459 | } 1460 | wsprintf(szKey, TEXT("CLSID\\%s\\Version"), g_szClsid); 1461 | lr = CreateRegistryKey(HKEY_CLASSES_ROOT, szKey, NULL, TEXT("1.0")); 1462 | if (lr != ERROR_SUCCESS) { 1463 | return ShowRegError(lr); 1464 | } 1465 | return S_OK; 1466 | } 1467 | 1468 | STDAPI DllUnregisterServer(void) 1469 | { 1470 | TCHAR szKey[64]; 1471 | wsprintf(szKey, TEXT("CLSID\\%s"), g_szClsid); 1472 | LSTATUS ls = SHDeleteKey(HKEY_CLASSES_ROOT, szKey); 1473 | #ifdef _WIN64 1474 | if (ls == ERROR_SUCCESS) { 1475 | return S_OK; 1476 | } 1477 | #else 1478 | if (ls == ERROR_SUCCESS) { 1479 | ls = SHDeleteKey(HKEY_CLASSES_ROOT, g_szProgid); 1480 | if (ls == ERROR_SUCCESS) { 1481 | return S_OK; 1482 | } 1483 | } 1484 | #endif 1485 | return ShowRegError(ls); 1486 | } 1487 | 1488 | BOOL WINAPI DllMain(HINSTANCE hinstDll, DWORD dwReason, LPVOID lpReserved) 1489 | { 1490 | switch (dwReason) { 1491 | 1492 | case DLL_PROCESS_ATTACH: 1493 | g_hinstDll = hinstDll; 1494 | CLSIDFromString(g_szClsid, &CLSID_TScriptServer); 1495 | g_map = SortTEMethod(methodTSC, _countof(methodTSC)); 1496 | CoCreateGuid(&g_ClsIdScriptObject); 1497 | break; 1498 | case DLL_PROCESS_DETACH: 1499 | delete [] g_map; 1500 | break; 1501 | } 1502 | return TRUE; 1503 | } 1504 | 1505 | //CteDispatch 1506 | 1507 | CteDispatch::CteDispatch(IDispatch *pDispatch, int nMode) 1508 | { 1509 | m_cRef = 1; 1510 | m_pDispatch = pDispatch; 1511 | m_pDispatch->AddRef(); 1512 | m_nMode = nMode; 1513 | m_dispIdMember = DISPID_UNKNOWN; 1514 | m_pActiveScript = NULL; 1515 | m_nIndex = 0; 1516 | } 1517 | 1518 | CteDispatch::~CteDispatch() 1519 | { 1520 | SafeRelease(&m_pDispatch); 1521 | if (m_pActiveScript) { 1522 | m_pActiveScript->SetScriptState(SCRIPTSTATE_CLOSED); 1523 | m_pActiveScript->Close(); 1524 | m_pActiveScript->Release(); 1525 | } 1526 | } 1527 | 1528 | STDMETHODIMP CteDispatch::QueryInterface(REFIID riid, void **ppvObject) 1529 | { 1530 | #pragma warning(push) 1531 | #pragma warning(disable:4838) 1532 | static const QITAB qit[] = 1533 | { 1534 | QITABENT(CteDispatch, IDispatch), 1535 | QITABENT(CteDispatch, IEnumVARIANT), 1536 | { 0 }, 1537 | }; 1538 | #pragma warning(pop) 1539 | HRESULT hr = QISearch(this, qit, riid, ppvObject); 1540 | if SUCCEEDED(hr) { 1541 | return hr; 1542 | } 1543 | if (m_nMode) { 1544 | return m_pDispatch->QueryInterface(riid, ppvObject); 1545 | } 1546 | return E_NOINTERFACE; 1547 | } 1548 | 1549 | STDMETHODIMP_(ULONG) CteDispatch::AddRef() 1550 | { 1551 | return ::InterlockedIncrement(&m_cRef); 1552 | } 1553 | 1554 | STDMETHODIMP_(ULONG) CteDispatch::Release() 1555 | { 1556 | if (::InterlockedDecrement(&m_cRef) == 0) { 1557 | delete this; 1558 | return 0; 1559 | } 1560 | 1561 | return m_cRef; 1562 | } 1563 | 1564 | STDMETHODIMP CteDispatch::GetTypeInfoCount(UINT *pctinfo) 1565 | { 1566 | *pctinfo = 0; 1567 | return S_OK; 1568 | } 1569 | 1570 | STDMETHODIMP CteDispatch::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) 1571 | { 1572 | return E_NOTIMPL; 1573 | } 1574 | 1575 | STDMETHODIMP CteDispatch::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) 1576 | { 1577 | if (m_nMode) { 1578 | if (m_nMode == 2) { 1579 | if (lstrcmp(*rgszNames, L"Item") == 0) { 1580 | *rgDispId = DISPID_VALUE; 1581 | return S_OK; 1582 | } 1583 | } 1584 | return m_pDispatch->GetIDsOfNames(riid, rgszNames, cNames, lcid, rgDispId); 1585 | } 1586 | return DISP_E_UNKNOWNNAME; 1587 | } 1588 | 1589 | STDMETHODIMP CteDispatch::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) 1590 | { 1591 | if (pVarResult) { 1592 | VariantInit(pVarResult); 1593 | } 1594 | if (m_nMode) { 1595 | if (dispIdMember == DISPID_NEWENUM) { 1596 | teSetObject(pVarResult, this); 1597 | return S_OK; 1598 | } 1599 | if (dispIdMember == DISPID_VALUE) { 1600 | int nArg = pDispParams ? pDispParams->cArgs - 1 : -1; 1601 | if (nArg >= 0) { 1602 | VARIANTARG *pv = GetNewVARIANT(1); 1603 | teVariantChangeType(pv, &pDispParams->rgvarg[nArg], VT_BSTR); 1604 | m_pDispatch->GetIDsOfNames(IID_NULL, &pv[0].bstrVal, 1, LOCALE_USER_DEFAULT, &dispIdMember); 1605 | VariantClear(&pv[0]); 1606 | if (nArg >= 1) { 1607 | VariantCopy(&pv[0], &pDispParams->rgvarg[nArg - 1]); 1608 | Invoke5(m_pDispatch, dispIdMember, DISPATCH_PROPERTYPUT, NULL, 1, pv); 1609 | } else { 1610 | delete [] pv; 1611 | } 1612 | if (pVarResult) { 1613 | Invoke5(m_pDispatch, dispIdMember, DISPATCH_PROPERTYGET, pVarResult, 0, NULL); 1614 | } 1615 | return S_OK; 1616 | } 1617 | teSetObject(pVarResult, this); 1618 | return S_OK; 1619 | } 1620 | return m_pDispatch->Invoke(dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); 1621 | } 1622 | if (wFlags & DISPATCH_METHOD) { 1623 | return m_pDispatch->Invoke(m_dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); 1624 | } 1625 | teSetObject(pVarResult, this); 1626 | return S_OK; 1627 | } 1628 | 1629 | STDMETHODIMP CteDispatch::Next(ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched) 1630 | { 1631 | if (rgVar) { 1632 | if (m_nMode) { 1633 | IDispatchEx *pdex = NULL; 1634 | if SUCCEEDED(m_pDispatch->QueryInterface(IID_PPV_ARGS(&pdex))) { 1635 | HRESULT hr; 1636 | hr = pdex->GetNextDispID(0, m_dispIdMember, &m_dispIdMember); 1637 | if (hr == S_OK) { 1638 | hr = pdex->GetMemberName(m_dispIdMember, &rgVar->bstrVal); 1639 | rgVar->vt = VT_BSTR; 1640 | } 1641 | pdex->Release(); 1642 | return hr; 1643 | } 1644 | } 1645 | int nCount = 0; 1646 | VARIANT v; 1647 | if (Invoke5(m_pDispatch, DISPID_TE_COUNT, DISPATCH_PROPERTYGET, &v, 0, NULL) == S_OK) { 1648 | nCount = GetIntFromVariantClear(&v); 1649 | } 1650 | if (m_nIndex < nCount) { 1651 | if (pCeltFetched) { 1652 | *pCeltFetched = 1; 1653 | } 1654 | VARIANTARG *pv = GetNewVARIANT(1); 1655 | pv[0].vt = VT_I4; 1656 | pv[0].lVal = m_nIndex++; 1657 | return Invoke5(m_pDispatch, DISPID_TE_ITEM, DISPATCH_METHOD, rgVar, 1, pv); 1658 | } 1659 | } 1660 | return S_FALSE; 1661 | } 1662 | 1663 | STDMETHODIMP CteDispatch::Skip(ULONG celt) 1664 | { 1665 | m_nIndex += celt; 1666 | return S_OK; 1667 | } 1668 | 1669 | STDMETHODIMP CteDispatch::Reset(void) 1670 | { 1671 | m_nIndex = 0; 1672 | return S_OK; 1673 | } 1674 | 1675 | STDMETHODIMP CteDispatch::Clone(IEnumVARIANT **ppEnum) 1676 | { 1677 | if (ppEnum) { 1678 | CteDispatch *pdisp = new CteDispatch(m_pDispatch, m_nMode); 1679 | pdisp->m_dispIdMember = m_dispIdMember; 1680 | pdisp->m_nMode = m_nMode; 1681 | *ppEnum = static_cast(pdisp); 1682 | return S_OK; 1683 | } 1684 | return E_POINTER; 1685 | } 1686 | 1687 | //CteActiveScriptSite 1688 | CteActiveScriptSite::CteActiveScriptSite(IUnknown *punk, CTScriptControl *pSC) 1689 | { 1690 | m_cRef = 1; 1691 | m_pDispatchEx = NULL; 1692 | m_pSC = pSC; 1693 | m_pSC->AddRef(); 1694 | if (punk) { 1695 | punk->QueryInterface(IID_PPV_ARGS(&m_pDispatchEx)); 1696 | } 1697 | m_hr = S_OK; 1698 | } 1699 | 1700 | CteActiveScriptSite::~CteActiveScriptSite() 1701 | { 1702 | SafeRelease(&m_pSC); 1703 | SafeRelease(&m_pDispatchEx); 1704 | } 1705 | 1706 | STDMETHODIMP CteActiveScriptSite::QueryInterface(REFIID riid, void **ppvObject) 1707 | { 1708 | #pragma warning(push) 1709 | #pragma warning(disable:4838) 1710 | static const QITAB qit[] = 1711 | { 1712 | QITABENT(CteActiveScriptSite, IActiveScriptSite), 1713 | QITABENT(CteActiveScriptSite, IActiveScriptSiteWindow), 1714 | { 0 }, 1715 | }; 1716 | #pragma warning(pop) 1717 | return QISearch(this, qit, riid, ppvObject); 1718 | } 1719 | 1720 | STDMETHODIMP_(ULONG) CteActiveScriptSite::AddRef() 1721 | { 1722 | return ::InterlockedIncrement(&m_cRef); 1723 | } 1724 | 1725 | STDMETHODIMP_(ULONG) CteActiveScriptSite::Release() 1726 | { 1727 | if (::InterlockedDecrement(&m_cRef) == 0) { 1728 | delete this; 1729 | return 0; 1730 | } 1731 | 1732 | return m_cRef; 1733 | } 1734 | 1735 | STDMETHODIMP CteActiveScriptSite::GetLCID(LCID *plcid) 1736 | { 1737 | return E_NOTIMPL; 1738 | } 1739 | 1740 | STDMETHODIMP CteActiveScriptSite::GetItemInfo(LPCOLESTR pstrName, 1741 | DWORD dwReturnMask, 1742 | IUnknown **ppiunkItem, 1743 | ITypeInfo **ppti) 1744 | { 1745 | HRESULT hr = TYPE_E_ELEMENTNOTFOUND; 1746 | if (dwReturnMask & SCRIPTINFO_IUNKNOWN) { 1747 | if (m_pDispatchEx) { 1748 | BSTR bs = ::SysAllocString(pstrName); 1749 | DISPID dispid; 1750 | if (m_pDispatchEx->GetDispID(bs, 0, &dispid) == S_OK) { 1751 | DISPPARAMS noargs = { NULL, NULL, 0, 0 }; 1752 | VARIANT v; 1753 | VariantInit(&v); 1754 | if (m_pDispatchEx->InvokeEx(dispid, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYGET, &noargs, &v, NULL, NULL) == S_OK) { 1755 | if (FindUnknown(&v, ppiunkItem)) { 1756 | CTScriptObject *pSO; 1757 | if SUCCEEDED((*ppiunkItem)->QueryInterface(g_ClsIdScriptObject, (LPVOID *)&pSO)) { 1758 | SafeRelease(ppiunkItem); 1759 | *ppiunkItem = pSO->m_pObject; 1760 | } 1761 | hr = S_OK; 1762 | } else { 1763 | VariantClear(&v); 1764 | } 1765 | } 1766 | } 1767 | ::SysFreeString(bs); 1768 | } 1769 | } 1770 | return hr; 1771 | } 1772 | 1773 | STDMETHODIMP CteActiveScriptSite::GetDocVersionString(BSTR *pbstrVersion) 1774 | { 1775 | *pbstrVersion = SysAllocString(TITLE); 1776 | return S_OK; 1777 | } 1778 | 1779 | STDMETHODIMP CteActiveScriptSite::OnScriptError(IActiveScriptError *pscripterror) 1780 | { 1781 | if (!pscripterror) { 1782 | return E_POINTER; 1783 | } 1784 | if (!m_pSC) { 1785 | return S_OK; 1786 | } 1787 | EXCEPINFO *pei = &m_pSC->m_pError->m_EI; 1788 | teClearExceptInfo(pei); 1789 | if SUCCEEDED(pscripterror->GetExceptionInfo(pei)) { 1790 | m_hr = pei->scode; 1791 | m_pSC->m_hr = m_hr; 1792 | DWORD dwSourceContext = 0; 1793 | pscripterror->GetSourcePosition(&dwSourceContext, &m_pSC->m_pError->m_ulLine, &m_pSC->m_pError->m_lColumn); 1794 | teSysFreeString(&m_pSC->m_pError->m_bsText); 1795 | pscripterror->GetSourceLineText(&m_pSC->m_pError->m_bsText); 1796 | if (m_pSC->m_pEventSink) { 1797 | VARIANT v; 1798 | VariantInit(&v); 1799 | if (Invoke5(m_pSC->m_pEventSink, 3000, DISPATCH_METHOD, &v, 0, NULL) == S_OK) { 1800 | VariantClear(&v); 1801 | } 1802 | } 1803 | if (m_pSC->m_pEI) { 1804 | try { 1805 | if SUCCEEDED(pscripterror->GetExceptionInfo(m_pSC->m_pEI)) { 1806 | m_pSC->m_hr = DISP_E_EXCEPTION; 1807 | } 1808 | } catch (...) { 1809 | m_pSC->m_hr = DISP_E_EXCEPTION; 1810 | } 1811 | } 1812 | } 1813 | return S_OK; 1814 | } 1815 | 1816 | STDMETHODIMP CteActiveScriptSite::OnStateChange(SCRIPTSTATE ssScriptState) 1817 | { 1818 | return S_OK; 1819 | } 1820 | 1821 | STDMETHODIMP CteActiveScriptSite::OnScriptTerminate(const VARIANT *pvarResult,const EXCEPINFO *pexcepinfo) 1822 | { 1823 | return S_OK; 1824 | } 1825 | 1826 | STDMETHODIMP CteActiveScriptSite::OnEnterScript(void) 1827 | { 1828 | return S_OK; 1829 | } 1830 | 1831 | STDMETHODIMP CteActiveScriptSite::OnLeaveScript(void) 1832 | { 1833 | return S_OK; 1834 | } 1835 | 1836 | STDMETHODIMP CteActiveScriptSite::GetWindow(HWND *phwnd) 1837 | { 1838 | *phwnd = m_pSC ? m_pSC->m_hwnd.hwnd : 0; 1839 | return S_OK; 1840 | } 1841 | 1842 | STDMETHODIMP CteActiveScriptSite::EnableModeless(BOOL fEnable) 1843 | { 1844 | return E_NOTIMPL; 1845 | } 1846 | 1847 | //CTScriptError 1848 | 1849 | CTScriptError::CTScriptError() 1850 | { 1851 | m_cRef = 1; 1852 | m_EI.bstrSource = NULL; 1853 | m_EI.bstrDescription = NULL; 1854 | m_EI.bstrHelpFile = NULL; 1855 | m_bsText = NULL; 1856 | raw_Clear(); 1857 | } 1858 | 1859 | CTScriptError::~CTScriptError() 1860 | { 1861 | raw_Clear(); 1862 | } 1863 | 1864 | STDMETHODIMP CTScriptError::QueryInterface(REFIID riid, void **ppvObject) 1865 | { 1866 | #pragma warning(push) 1867 | #pragma warning(disable:4838) 1868 | static const QITAB qit[] = 1869 | { 1870 | QITABENT(CTScriptError, IDispatch), 1871 | QITABENT(CTScriptError, IScriptError), 1872 | { 0 }, 1873 | }; 1874 | #pragma warning(pop) 1875 | return QISearch(this, qit, riid, ppvObject); 1876 | } 1877 | 1878 | STDMETHODIMP_(ULONG) CTScriptError::AddRef() 1879 | { 1880 | return InterlockedIncrement(&m_cRef); 1881 | } 1882 | 1883 | STDMETHODIMP_(ULONG) CTScriptError::Release() 1884 | { 1885 | if (InterlockedDecrement(&m_cRef) == 0) { 1886 | delete this; 1887 | return 0; 1888 | } 1889 | 1890 | return m_cRef; 1891 | } 1892 | 1893 | STDMETHODIMP CTScriptError::GetTypeInfoCount(UINT *pctinfo) 1894 | { 1895 | *pctinfo = 0; 1896 | return S_OK; 1897 | } 1898 | 1899 | STDMETHODIMP CTScriptError::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) 1900 | { 1901 | return E_NOTIMPL; 1902 | } 1903 | 1904 | STDMETHODIMP CTScriptError::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) 1905 | { 1906 | return teGetDispId(methodTSE, _countof(methodTSE), NULL, *rgszNames, rgDispId); 1907 | } 1908 | 1909 | STDMETHODIMP CTScriptError::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) 1910 | { 1911 | switch (dispIdMember) { 1912 | //Number 1913 | case 0x000000c9: 1914 | if (pVarResult) { 1915 | pVarResult->vt = VT_I4; 1916 | return get_Number(&pVarResult->lVal); 1917 | } 1918 | return S_OK; 1919 | //Source 1920 | case 0x000000ca: 1921 | if (pVarResult) { 1922 | pVarResult->vt = VT_BSTR; 1923 | return get_Source(&pVarResult->bstrVal); 1924 | } 1925 | return S_OK; 1926 | //Description 1927 | case 0x000000cb: 1928 | if (pVarResult) { 1929 | pVarResult->vt = VT_BSTR; 1930 | return get_Description(&pVarResult->bstrVal); 1931 | } 1932 | return S_OK; 1933 | //HelpContext 1934 | case 0x000000cd: 1935 | if (pVarResult) { 1936 | pVarResult->vt = VT_I4; 1937 | return get_HelpContext(&pVarResult->lVal); 1938 | } 1939 | return S_OK; 1940 | //Text 1941 | case 0xfffffdfb: 1942 | if (pVarResult) { 1943 | pVarResult->vt = VT_BSTR; 1944 | return get_Text(&pVarResult->bstrVal); 1945 | } 1946 | return S_OK; 1947 | //Line 1948 | case 0x000000ce: 1949 | if (pVarResult) { 1950 | pVarResult->vt = VT_I4; 1951 | return get_Line(&pVarResult->lVal); 1952 | } 1953 | return S_OK; 1954 | //Column 1955 | case 0xfffffdef: 1956 | if (pVarResult) { 1957 | pVarResult->vt = VT_I4; 1958 | return get_Column(&pVarResult->lVal); 1959 | } 1960 | return S_OK; 1961 | //Clear 1962 | case 0x000000d0: 1963 | return raw_Clear(); 1964 | //this 1965 | case DISPID_VALUE: 1966 | teSetObject(pVarResult, this); 1967 | return S_OK; 1968 | }//end_switch 1969 | return DISP_E_MEMBERNOTFOUND; 1970 | } 1971 | 1972 | STDMETHODIMP CTScriptError::get_Number(long *plNumber) 1973 | { 1974 | *plNumber = LOWORD(m_EI.scode); 1975 | return S_OK; 1976 | } 1977 | 1978 | STDMETHODIMP CTScriptError::get_Source(BSTR *pbstrSource) 1979 | { 1980 | *pbstrSource = ::SysAllocString(m_EI.bstrSource); 1981 | return S_OK; 1982 | } 1983 | 1984 | STDMETHODIMP CTScriptError::get_Description (BSTR *pbstrDescription) 1985 | { 1986 | *pbstrDescription = ::SysAllocString(m_EI.bstrDescription); 1987 | return S_OK; 1988 | } 1989 | 1990 | STDMETHODIMP CTScriptError::get_HelpFile(BSTR *pbstrHelpFile) 1991 | { 1992 | *pbstrHelpFile = ::SysAllocString(m_EI.bstrHelpFile); 1993 | return S_OK; 1994 | } 1995 | 1996 | STDMETHODIMP CTScriptError::get_HelpContext(long *plHelpContext) 1997 | { 1998 | *plHelpContext = m_EI.dwHelpContext; 1999 | return S_OK; 2000 | } 2001 | 2002 | STDMETHODIMP CTScriptError::get_Text(BSTR *pbstrText) 2003 | { 2004 | *pbstrText = ::SysAllocString(m_bsText); 2005 | return S_OK; 2006 | } 2007 | 2008 | STDMETHODIMP CTScriptError::get_Line(long *plLine) 2009 | { 2010 | *plLine = m_ulLine; 2011 | return S_OK; 2012 | } 2013 | 2014 | STDMETHODIMP CTScriptError::get_Column(long *plColumn) 2015 | { 2016 | *plColumn = m_lColumn; 2017 | return S_OK; 2018 | } 2019 | 2020 | STDMETHODIMP CTScriptError::raw_Clear() 2021 | { 2022 | m_ulLine = 0; 2023 | m_lColumn = 0; 2024 | teSysFreeString(&m_bsText); 2025 | teClearExceptInfo(&m_EI); 2026 | return S_OK; 2027 | } 2028 | -------------------------------------------------------------------------------- /tsc64/tsc64.def: -------------------------------------------------------------------------------- 1 | LIBRARY "tsc64" 2 | 3 | EXPORTS 4 | DllCanUnloadNow PRIVATE 5 | DllGetClassObject PRIVATE 6 | DllRegisterServer PRIVATE 7 | DllUnregisterServer PRIVATE -------------------------------------------------------------------------------- /tsc64/tsc64.h: -------------------------------------------------------------------------------- 1 | #include "resource.h" 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #import 9 | using namespace MSScriptControl; 10 | #pragma comment (lib, "shlwapi.lib") 11 | 12 | #define DISPID_TE_ITEM 0x3fffffff 13 | #define DISPID_TE_COUNT 0x3ffffffe 14 | #define DISPID_TE_INDEX 0x3ffffffd 15 | #define DISPID_TE_MAX TE_VI 16 | #define EVENT_COOKIE 100 17 | 18 | union TUHWND { 19 | long l[2]; 20 | HWND hwnd; 21 | LONGLONG ll; 22 | }; 23 | 24 | struct TEmethod 25 | { 26 | LONG id; 27 | LPWSTR name; 28 | }; 29 | 30 | struct TETimer 31 | { 32 | IStream *pStream; 33 | IActiveScript *pas; 34 | HANDLE hEvent; 35 | LONG lTimeout; 36 | LONG cRef; 37 | }; 38 | 39 | class CteDispatch : public IDispatch, public IEnumVARIANT 40 | { 41 | public: 42 | STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject); 43 | STDMETHODIMP_(ULONG) AddRef(); 44 | STDMETHODIMP_(ULONG) Release(); 45 | //IDispatch 46 | STDMETHODIMP GetTypeInfoCount(UINT *pctinfo); 47 | STDMETHODIMP GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); 48 | STDMETHODIMP GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); 49 | STDMETHODIMP Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); 50 | //IEnumVARIANT 51 | STDMETHODIMP Next(ULONG celt, VARIANT *rgVar, ULONG *pCeltFetched); 52 | STDMETHODIMP Skip(ULONG celt); 53 | STDMETHODIMP Reset(void); 54 | STDMETHODIMP Clone(IEnumVARIANT **ppEnum); 55 | 56 | CteDispatch(IDispatch *pDispatch, int nMode); 57 | ~CteDispatch(); 58 | 59 | DISPID m_dispIdMember; 60 | int m_nIndex; 61 | IActiveScript *m_pActiveScript; 62 | private: 63 | LONG m_cRef; 64 | IDispatch *m_pDispatch; 65 | int m_nMode;//0: Clone 1:collection 2:ScriptDispatch 66 | }; 67 | 68 | class CTScriptError : public IScriptError 69 | { 70 | public: 71 | EXCEPINFO m_EI; 72 | DWORD m_ulLine; 73 | LONG m_lColumn; 74 | BSTR m_bsText; 75 | //IUnknown 76 | STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject); 77 | STDMETHODIMP_(ULONG) AddRef(); 78 | STDMETHODIMP_(ULONG) Release(); 79 | //IDispatch 80 | STDMETHODIMP GetTypeInfoCount(UINT *pctinfo); 81 | STDMETHODIMP GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); 82 | STDMETHODIMP GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); 83 | STDMETHODIMP Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); 84 | //IScriptError 85 | STDMETHODIMP get_Number(long *plNumber); 86 | STDMETHODIMP get_Source(BSTR *pbstrSource); 87 | STDMETHODIMP get_Description (BSTR *pbstrDescription); 88 | STDMETHODIMP get_HelpFile(BSTR *pbstrHelpFile); 89 | STDMETHODIMP get_HelpContext(long *plHelpContext); 90 | STDMETHODIMP get_Text(BSTR *pbstrText); 91 | STDMETHODIMP get_Line(long *plLine); 92 | STDMETHODIMP get_Column(long *plColumn); 93 | STDMETHODIMP raw_Clear(); 94 | 95 | CTScriptError(); 96 | ~CTScriptError(); 97 | private: 98 | LONG m_cRef; 99 | }; 100 | 101 | class CTScriptControl : public IScriptControl, 102 | public IOleObject, public IPersistStreamInit, 103 | public IOleControl, 104 | public IConnectionPointContainer, IConnectionPoint 105 | { 106 | public: 107 | TUHWND m_hwnd; 108 | CTScriptError *m_pError; 109 | EXCEPINFO *m_pEI; 110 | HRESULT m_hr; 111 | IDispatch *m_pEventSink; 112 | //IUnknown 113 | STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject); 114 | STDMETHODIMP_(ULONG) AddRef(); 115 | STDMETHODIMP_(ULONG) Release(); 116 | //IDispatch 117 | STDMETHODIMP GetTypeInfoCount(UINT *pctinfo); 118 | STDMETHODIMP GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo); 119 | STDMETHODIMP GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); 120 | STDMETHODIMP Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr); 121 | //IScriptContotol 122 | STDMETHODIMP get_Language(BSTR * pbstrLanguage); 123 | STDMETHODIMP put_Language(BSTR bstrLanguage); 124 | STDMETHODIMP get_State(enum ScriptControlStates * pssState); 125 | STDMETHODIMP put_State(enum ScriptControlStates ssState); 126 | STDMETHODIMP put_SitehWnd(long hwnd); 127 | STDMETHODIMP get_SitehWnd(long * phwnd); 128 | STDMETHODIMP get_Timeout(long * plMilleseconds); 129 | STDMETHODIMP put_Timeout(long lMilleseconds); 130 | STDMETHODIMP get_AllowUI(VARIANT_BOOL * pfAllowUI); 131 | STDMETHODIMP put_AllowUI(VARIANT_BOOL fAllowUI); 132 | STDMETHODIMP get_UseSafeSubset(VARIANT_BOOL * pfUseSafeSubset); 133 | STDMETHODIMP put_UseSafeSubset(VARIANT_BOOL pfUseSafeSubset); 134 | STDMETHODIMP get_Modules(struct IScriptModuleCollection ** ppmods); 135 | STDMETHODIMP get_Error(struct IScriptError ** ppse); 136 | STDMETHODIMP get_CodeObject(IDispatch ** ppdispObject); 137 | STDMETHODIMP get_Procedures(struct IScriptProcedureCollection ** ppdispProcedures); 138 | STDMETHODIMP raw__AboutBox(); 139 | STDMETHODIMP raw_AddObject(BSTR Name,IDispatch * Object,VARIANT_BOOL AddMembers); 140 | STDMETHODIMP raw_Reset(); 141 | STDMETHODIMP raw_AddCode(BSTR Code); 142 | STDMETHODIMP raw_Eval(BSTR Expression,VARIANT * pvarResult); 143 | STDMETHODIMP raw_ExecuteStatement(BSTR Statement); 144 | STDMETHODIMP raw_Run(BSTR ProcedureName,SAFEARRAY ** Parameters,VARIANT * pvarResult); 145 | //IOleObject 146 | STDMETHODIMP SetClientSite(IOleClientSite *pClientSite); 147 | STDMETHODIMP GetClientSite(IOleClientSite **ppClientSite); 148 | STDMETHODIMP SetHostNames(LPCOLESTR szContainerApp, LPCOLESTR szContainerObj); 149 | STDMETHODIMP Close(DWORD dwSaveOption); 150 | STDMETHODIMP SetMoniker(DWORD dwWhichMoniker, IMoniker *pmk); 151 | STDMETHODIMP GetMoniker(DWORD dwAssign, DWORD dwWhichMoniker, IMoniker **ppmk); 152 | STDMETHODIMP InitFromData(IDataObject *pDataObject, BOOL fCreation, DWORD dwReserved); 153 | STDMETHODIMP GetClipboardData(DWORD dwReserved, IDataObject **ppDataObject); 154 | STDMETHODIMP DoVerb(LONG iVerb, LPMSG lpmsg, IOleClientSite *pActiveSite, LONG lindex, HWND hwndParent, LPCRECT lprcPosRect); 155 | STDMETHODIMP EnumVerbs(IEnumOLEVERB **ppEnumOleVerb); 156 | STDMETHODIMP Update(void); 157 | STDMETHODIMP IsUpToDate(void); 158 | STDMETHODIMP GetUserClassID(CLSID *pClsid); 159 | STDMETHODIMP GetUserType(DWORD dwFormOfType, LPOLESTR *pszUserType); 160 | STDMETHODIMP SetExtent(DWORD dwDrawAspect, SIZEL *psizel); 161 | STDMETHODIMP GetExtent(DWORD dwDrawAspect, SIZEL *psizel); 162 | STDMETHODIMP Advise(IAdviseSink *pAdvSink, DWORD *pdwConnection); 163 | // STDMETHODIMP Unadvise(DWORD dwConnection); 164 | STDMETHODIMP EnumAdvise(IEnumSTATDATA **ppenumAdvise); 165 | STDMETHODIMP GetMiscStatus(DWORD dwAspect, DWORD *pdwStatus); 166 | STDMETHODIMP SetColorScheme(LOGPALETTE *pLogpal); 167 | //IPersist 168 | STDMETHODIMP GetClassID(CLSID *pClassID); 169 | //IPersistStreamInit 170 | STDMETHODIMP IsDirty(void); 171 | STDMETHODIMP Load(LPSTREAM pStm); 172 | STDMETHODIMP Save(LPSTREAM pStm, BOOL fClearDirty); 173 | STDMETHODIMP GetSizeMax(ULARGE_INTEGER *pCbSize); 174 | STDMETHODIMP InitNew(void); 175 | //IOleControl 176 | STDMETHODIMP GetControlInfo(CONTROLINFO *pCI); 177 | STDMETHODIMP OnMnemonic(MSG *pMsg); 178 | STDMETHODIMP OnAmbientPropertyChange(DISPID dispID); 179 | STDMETHODIMP FreezeEvents(BOOL bFreeze); 180 | //IConnectionPointContainer 181 | STDMETHODIMP EnumConnectionPoints(IEnumConnectionPoints **ppEnum); 182 | STDMETHODIMP FindConnectionPoint(REFIID riid, IConnectionPoint **ppCP); 183 | //IConnectionPoint 184 | STDMETHODIMP GetConnectionInterface(IID *pIID); 185 | STDMETHODIMP GetConnectionPointContainer(IConnectionPointContainer **ppCPC); 186 | STDMETHODIMP Advise(IUnknown *pUnkSink, DWORD *pdwCookie); 187 | STDMETHODIMP Unadvise(DWORD dwCookie); 188 | STDMETHODIMP EnumConnections(IEnumConnections **ppEnum); 189 | 190 | CTScriptControl(); 191 | ~CTScriptControl(); 192 | 193 | HRESULT Exec(BSTR Expression,VARIANT * pvarResult, DWORD dwFlags); 194 | HRESULT ParseScript(LPOLESTR lpScript, LPOLESTR lpLang, IDispatchEx *pdex, IDispatch **ppdisp, IActiveScript **ppas, VARIANT *pvarResult, DWORD dwFlags); 195 | VOID Clear(); 196 | HRESULT SetScriptError(int n); 197 | 198 | private: 199 | LONG m_cRef; 200 | BSTR m_bsLang; 201 | IActiveScript *m_pActiveScript; 202 | IDispatch *m_pJS; 203 | IDispatch *m_pObject; 204 | IDispatchEx *m_pObjectEx; 205 | IDispatch *m_pCode; 206 | IOleClientSite *m_pClientSite; 207 | ITypeInfo *m_pTypeInfo; 208 | long m_lTimeout; 209 | VARIANT_BOOL m_fAllowUI; 210 | VARIANT_BOOL m_fUseSafeSubset; 211 | }; 212 | 213 | class CteActiveScriptSite : public IActiveScriptSite, public IActiveScriptSiteWindow 214 | { 215 | public: 216 | STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject); 217 | STDMETHODIMP_(ULONG) AddRef(); 218 | STDMETHODIMP_(ULONG) Release(); 219 | //ActiveScriptSite 220 | STDMETHODIMP GetLCID(LCID *plcid); 221 | STDMETHODIMP GetItemInfo(LPCOLESTR pstrName, 222 | DWORD dwReturnMask, 223 | IUnknown **ppiunkItem, 224 | ITypeInfo **ppti); 225 | STDMETHODIMP GetDocVersionString(BSTR *pbstrVersion); 226 | STDMETHODIMP OnScriptError(IActiveScriptError *pscripterror); 227 | STDMETHODIMP OnStateChange(SCRIPTSTATE ssScriptState); 228 | STDMETHODIMP OnScriptTerminate(const VARIANT *pvarResult,const EXCEPINFO *pexcepinfo); 229 | STDMETHODIMP OnEnterScript(void); 230 | STDMETHODIMP OnLeaveScript(void); 231 | //IActiveScriptSiteWindow 232 | STDMETHODIMP GetWindow(HWND *phwnd); 233 | STDMETHODIMP EnableModeless(BOOL fEnable); 234 | 235 | CteActiveScriptSite(IUnknown *punk, CTScriptControl *pSC); 236 | ~CteActiveScriptSite(); 237 | public: 238 | IDispatchEx *m_pDispatchEx; 239 | CTScriptControl *m_pSC; 240 | HRESULT m_hr; 241 | LONG m_cRef; 242 | }; 243 | 244 | class CTScriptControlFactory : public IClassFactory 245 | { 246 | public: 247 | STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject); 248 | STDMETHODIMP_(ULONG) AddRef(); 249 | STDMETHODIMP_(ULONG) Release(); 250 | 251 | STDMETHODIMP CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObject); 252 | STDMETHODIMP LockServer(BOOL fLock); 253 | }; 254 | 255 | class CTScriptObject : public IUnknown 256 | { 257 | public: 258 | STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject); 259 | STDMETHODIMP_(ULONG) AddRef(); 260 | STDMETHODIMP_(ULONG) Release(); 261 | 262 | CTScriptObject(IDispatch *pObject, VARIANT_BOOL bAddMembers); 263 | ~CTScriptObject(); 264 | 265 | IDispatch *m_pObject; 266 | VARIANT_BOOL m_bAddMembers; 267 | LONG m_cRef; 268 | }; 269 | 270 | const CLSID CLSID_JScriptChakra = {0x16d51579, 0xa30b, 0x4c8b, { 0xa2, 0x76, 0x0f, 0xf4, 0xdc, 0x41, 0xe7, 0x55}}; 271 | -------------------------------------------------------------------------------- /tsc64/tsc64.idl: -------------------------------------------------------------------------------- 1 | import "oaidl.idl"; 2 | import "ocidl.idl"; 3 | 4 | [ 5 | object, 6 | uuid(0E59F1D3-1FBE-11D0-8FF2-00A0D10038BC), 7 | dual 8 | ] 9 | 10 | interface IScriptControl : IDispatch 11 | { 12 | typedef enum { 13 | Initialized = 0, 14 | Connected = 1 15 | } ScriptControlStates; 16 | 17 | [id(0x000005dc), propget] 18 | HRESULT Language([out, retval] BSTR* pbstrLanguage); 19 | [id(0x000005dc), propput] 20 | HRESULT Language([in] BSTR pbstrLanguage); 21 | [id(0x000005dd), propget] 22 | HRESULT State([out, retval] ScriptControlStates* pssState); 23 | [id(0x000005dd), propput] 24 | HRESULT State([in] ScriptControlStates pssState); 25 | [id(0x000005de), propput] 26 | HRESULT SitehWnd([in] long phwnd); 27 | [id(0x000005de), propget] 28 | HRESULT SitehWnd([out, retval] long* phwnd); 29 | [id(0x000005df), propget] 30 | HRESULT Timeout([out, retval] long* plMilleseconds); 31 | [id(0x000005df), propput] 32 | HRESULT Timeout([in] long plMilleseconds); 33 | [id(0x000005e0), propget] 34 | HRESULT AllowUI([out, retval] VARIANT_BOOL* pfAllowUI); 35 | [id(0x000005e0), propput] 36 | HRESULT AllowUI([in] VARIANT_BOOL pfAllowUI); 37 | [id(0x000005e1), propget] 38 | HRESULT UseSafeSubset([out, retval] VARIANT_BOOL* pfUseSafeSubset); 39 | [id(0x000005e1), propput] 40 | HRESULT UseSafeSubset([in] VARIANT_BOOL pfUseSafeSubset); 41 | [id(0x000005e2), propget] 42 | HRESULT Modules([out, retval] IDispatch** ppmods); 43 | [id(0x000005e3), propget] 44 | HRESULT Error([out, retval] IDispatch** ppse); 45 | [id(0x000003e8), propget] 46 | HRESULT CodeObject([out, retval] IDispatch** ppdispObject); 47 | [id(0x000003e9), propget] 48 | HRESULT Procedures([out, retval] IDispatch** ppdispProcedures); 49 | [id(0xfffffdd8), hidden] 50 | HRESULT _AboutBox(); 51 | [id(0x000009c4)] 52 | HRESULT AddObject( 53 | [in] BSTR Name, 54 | [in] IDispatch* Object, 55 | [in, optional, defaultvalue(0)] VARIANT_BOOL AddMembers); 56 | [id(0x000009c5)] 57 | HRESULT Reset(); 58 | [id(0x000007d0)] 59 | HRESULT AddCode([in] BSTR Code); 60 | [id(0x000007d1)] 61 | HRESULT Eval( 62 | [in] BSTR Expression, 63 | [out, retval] VARIANT* pvarResult); 64 | [id(0x000007d2)] 65 | HRESULT ExecuteStatement([in] BSTR Statement); 66 | [id(0x000007d3), vararg] 67 | HRESULT Run( 68 | [in] BSTR ProcedureName, 69 | [in] SAFEARRAY(VARIANT)* Parameters, 70 | [out, retval] VARIANT* pvarResult); 71 | }; 72 | 73 | // Type library 74 | [ 75 | version(1.0), 76 | uuid(0E59F1D2-1FBE-11D0-8FF2-00A0D10038BC), 77 | ] 78 | library IScriptControl 79 | { 80 | importlib("stdole32.tlb"); 81 | interface IScriptControl; 82 | }; -------------------------------------------------------------------------------- /tsc64/tsc64.rc: -------------------------------------------------------------------------------- 1 | #include 2 | #include "resource.h" 3 | 4 | // 5 | // Version Information resources 6 | // 7 | LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL 8 | 1 VERSIONINFO 9 | FILEVERSION VER_Y,VER_M,VER_D,VER_Z 10 | PRODUCTVERSION VER_Y,VER_M,VER_D,VER_Z 11 | FILEOS VOS_NT_WINDOWS32 12 | FILETYPE VFT_DLL 13 | FILESUBTYPE VFT2_UNKNOWN 14 | FILEFLAGSMASK 0x00000000 15 | FILEFLAGS 0x00000000 16 | { 17 | BLOCK "StringFileInfo" 18 | { 19 | BLOCK "0400FDE9" 20 | { 21 | VALUE "CompanyName", "Tablacus\0" 22 | VALUE "FileDescription", PRODUCTNAME "\0" 23 | VALUE "FileVersion", STRING(VER_Y) "." STRING(VER_M) "." STRING(VER_D) "." STRING(VER_Z) "\0" 24 | VALUE "InternalName", "tsc64\0" 25 | VALUE "LegalCopyright", "(C) Gaku\0" 26 | VALUE "OriginalFilename", "tsc64.dll\0" 27 | VALUE "ProductName", PRODUCTNAME "\0" 28 | VALUE "ProductVersion", STRING(VER_Y) "." STRING(VER_M) "." STRING(VER_D) "." STRING(VER_Z) "\0" 29 | } 30 | } 31 | BLOCK "VarFileInfo" 32 | { 33 | VALUE "Translation", 0x0400, 0xFDE9 34 | } 35 | } 36 | 1 typelib x64\Release\tsc64.tlb -------------------------------------------------------------------------------- /tsc64/tsc64.vcproj: -------------------------------------------------------------------------------- 1 |  2 | 11 | 12 | 15 | 18 | 19 | 20 | 21 | 22 | 29 | 32 | 35 | 38 | 41 | 44 | 55 | 58 | 61 | 64 | 71 | 74 | 77 | 80 | 83 | 86 | 89 | 92 | 93 | 100 | 103 | 106 | 109 | 112 | 115 | 118 | 121 | 124 | 127 | 131 | 134 | 137 | 140 | 143 | 146 | 149 | 152 | 153 | 161 | 164 | 167 | 170 | 173 | 176 | 187 | 190 | 193 | 196 | 206 | 209 | 212 | 215 | 218 | 221 | 224 | 227 | 228 | 235 | 238 | 241 | 244 | 247 | 250 | 253 | 256 | 259 | 262 | 266 | 269 | 272 | 275 | 278 | 281 | 284 | 287 | 288 | 289 | 290 | 291 | 292 | 297 | 300 | 301 | 302 | 307 | 310 | 311 | 314 | 315 | 318 | 319 | 320 | 325 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | -------------------------------------------------------------------------------- /tsc64/tsc64.vcxproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Debug 10 | x64 11 | 12 | 13 | Release 14 | Win32 15 | 16 | 17 | Release 18 | x64 19 | 20 | 21 | 22 | {BDD47254-2D2A-4984-920A-D52D65949630} 23 | tsc64 24 | Win32Proj 25 | 8.1 26 | 27 | 28 | 29 | DynamicLibrary 30 | Unicode 31 | true 32 | Windows7.1SDK 33 | 34 | 35 | DynamicLibrary 36 | Unicode 37 | v141 38 | 39 | 40 | DynamicLibrary 41 | Unicode 42 | v141 43 | 44 | 45 | DynamicLibrary 46 | Unicode 47 | v141 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | <_ProjectFileVersion>10.0.40219.1 67 | $(SolutionDir)$(Configuration)\ 68 | $(Configuration)\ 69 | true 70 | $(SolutionDir)$(Platform)\$(Configuration)\ 71 | $(Platform)\$(Configuration)\ 72 | $(SolutionDir)$(Configuration)\ 73 | $(Configuration)\ 74 | false 75 | $(SolutionDir)$(Platform)\$(Configuration)\ 76 | $(Platform)\$(Configuration)\ 77 | 78 | 79 | 80 | Disabled 81 | WIN32;_DEBUG;_WINDOWS;_USRDLL;TSC64_EXPORTS;%(PreprocessorDefinitions) 82 | true 83 | EnableFastChecks 84 | MultiThreadedDebugDLL 85 | 86 | 87 | Level3 88 | EditAndContinue 89 | 90 | 91 | true 92 | Windows 93 | MachineX86 94 | 95 | 96 | 97 | 98 | tsc64.def 99 | 100 | 101 | 102 | 103 | MaxSpeed 104 | true 105 | WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) 106 | MultiThreaded 107 | true 108 | 109 | 110 | Level3 111 | ProgramDatabase 112 | 113 | 114 | tsc64.def 115 | true 116 | Windows 117 | true 118 | true 119 | MachineX86 120 | 121 | 122 | 123 | 124 | tsc64.def 125 | true 126 | true 127 | 128 | 129 | MultiThreaded 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | -------------------------------------------------------------------------------- /tsc64/tsc64.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav 15 | 16 | 17 | 18 | 19 | Source Files 20 | 21 | 22 | 23 | 24 | Header Files 25 | 26 | 27 | Header Files 28 | 29 | 30 | 31 | 32 | Header Files 33 | 34 | 35 | 36 | 37 | Resource Files 38 | 39 | 40 | 41 | 42 | Header Files 43 | 44 | 45 | -------------------------------------------------------------------------------- /tsc64/tsc64_h.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | /* this ALWAYS GENERATED file contains the definitions for the interfaces */ 4 | 5 | 6 | /* File created by MIDL compiler version 8.00.0603 */ 7 | /* at Tue Jun 08 21:30:00 2021 8 | */ 9 | /* Compiler settings for tsc64.idl: 10 | Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 8.00.0603 11 | protocol : all , ms_ext, c_ext, robust 12 | error checks: allocation ref bounds_check enum stub_data 13 | VC __declspec() decoration level: 14 | __declspec(uuid()), __declspec(selectany), __declspec(novtable) 15 | DECLSPEC_UUID(), MIDL_INTERFACE() 16 | */ 17 | /* @@MIDL_FILE_HEADING( ) */ 18 | 19 | #pragma warning( disable: 4049 ) /* more than 64k source lines */ 20 | 21 | 22 | /* verify that the version is high enough to compile this file*/ 23 | #ifndef __REQUIRED_RPCNDR_H_VERSION__ 24 | #define __REQUIRED_RPCNDR_H_VERSION__ 500 25 | #endif 26 | 27 | #include "rpc.h" 28 | #include "rpcndr.h" 29 | 30 | #ifndef __RPCNDR_H_VERSION__ 31 | #error this stub requires an updated version of 32 | #endif // __RPCNDR_H_VERSION__ 33 | 34 | #ifndef COM_NO_WINDOWS_H 35 | #include "windows.h" 36 | #include "ole2.h" 37 | #endif /*COM_NO_WINDOWS_H*/ 38 | 39 | #ifndef __tsc64_h_h__ 40 | #define __tsc64_h_h__ 41 | 42 | #if defined(_MSC_VER) && (_MSC_VER >= 1020) 43 | #pragma once 44 | #endif 45 | 46 | /* Forward Declarations */ 47 | 48 | #ifndef __IScriptControl_FWD_DEFINED__ 49 | #define __IScriptControl_FWD_DEFINED__ 50 | typedef interface IScriptControl IScriptControl; 51 | 52 | #endif /* __IScriptControl_FWD_DEFINED__ */ 53 | 54 | 55 | #ifndef __IScriptControl_FWD_DEFINED__ 56 | #define __IScriptControl_FWD_DEFINED__ 57 | typedef interface IScriptControl IScriptControl; 58 | 59 | #endif /* __IScriptControl_FWD_DEFINED__ */ 60 | 61 | 62 | /* header files for imported files */ 63 | #include "oaidl.h" 64 | #include "ocidl.h" 65 | 66 | #ifdef __cplusplus 67 | extern "C"{ 68 | #endif 69 | 70 | 71 | #ifndef __IScriptControl_INTERFACE_DEFINED__ 72 | #define __IScriptControl_INTERFACE_DEFINED__ 73 | 74 | /* interface IScriptControl */ 75 | /* [dual][uuid][object] */ 76 | 77 | typedef /* [public][public][public] */ 78 | enum __MIDL_IScriptControl_0001 79 | { 80 | Initialized = 0, 81 | Connected = 1 82 | } ScriptControlStates; 83 | 84 | 85 | EXTERN_C const IID IID_IScriptControl; 86 | 87 | #if defined(__cplusplus) && !defined(CINTERFACE) 88 | 89 | MIDL_INTERFACE("0E59F1D3-1FBE-11D0-8FF2-00A0D10038BC") 90 | IScriptControl : public IDispatch 91 | { 92 | public: 93 | virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_Language( 94 | /* [retval][out] */ BSTR *pbstrLanguage) = 0; 95 | 96 | virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_Language( 97 | /* [in] */ BSTR pbstrLanguage) = 0; 98 | 99 | virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_State( 100 | /* [retval][out] */ ScriptControlStates *pssState) = 0; 101 | 102 | virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_State( 103 | /* [in] */ ScriptControlStates pssState) = 0; 104 | 105 | virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_SitehWnd( 106 | /* [in] */ long phwnd) = 0; 107 | 108 | virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_SitehWnd( 109 | /* [retval][out] */ long *phwnd) = 0; 110 | 111 | virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_Timeout( 112 | /* [retval][out] */ long *plMilleseconds) = 0; 113 | 114 | virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_Timeout( 115 | /* [in] */ long plMilleseconds) = 0; 116 | 117 | virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_AllowUI( 118 | /* [retval][out] */ VARIANT_BOOL *pfAllowUI) = 0; 119 | 120 | virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_AllowUI( 121 | /* [in] */ VARIANT_BOOL pfAllowUI) = 0; 122 | 123 | virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_UseSafeSubset( 124 | /* [retval][out] */ VARIANT_BOOL *pfUseSafeSubset) = 0; 125 | 126 | virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_UseSafeSubset( 127 | /* [in] */ VARIANT_BOOL pfUseSafeSubset) = 0; 128 | 129 | virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_Modules( 130 | /* [retval][out] */ IDispatch **ppmods) = 0; 131 | 132 | virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_Error( 133 | /* [retval][out] */ IDispatch **ppse) = 0; 134 | 135 | virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_CodeObject( 136 | /* [retval][out] */ IDispatch **ppdispObject) = 0; 137 | 138 | virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_Procedures( 139 | /* [retval][out] */ IDispatch **ppdispProcedures) = 0; 140 | 141 | virtual /* [hidden][id] */ HRESULT STDMETHODCALLTYPE _AboutBox( void) = 0; 142 | 143 | virtual /* [id] */ HRESULT STDMETHODCALLTYPE AddObject( 144 | /* [in] */ BSTR Name, 145 | /* [in] */ IDispatch *Object, 146 | /* [defaultvalue][optional][in] */ VARIANT_BOOL AddMembers = 0) = 0; 147 | 148 | virtual /* [id] */ HRESULT STDMETHODCALLTYPE Reset( void) = 0; 149 | 150 | virtual /* [id] */ HRESULT STDMETHODCALLTYPE AddCode( 151 | /* [in] */ BSTR Code) = 0; 152 | 153 | virtual /* [id] */ HRESULT STDMETHODCALLTYPE Eval( 154 | /* [in] */ BSTR Expression, 155 | /* [retval][out] */ VARIANT *pvarResult) = 0; 156 | 157 | virtual /* [id] */ HRESULT STDMETHODCALLTYPE ExecuteStatement( 158 | /* [in] */ BSTR Statement) = 0; 159 | 160 | virtual /* [vararg][id] */ HRESULT STDMETHODCALLTYPE Run( 161 | /* [in] */ BSTR ProcedureName, 162 | /* [in] */ SAFEARRAY * *Parameters, 163 | /* [retval][out] */ VARIANT *pvarResult) = 0; 164 | 165 | }; 166 | 167 | 168 | #else /* C style interface */ 169 | 170 | typedef struct IScriptControlVtbl 171 | { 172 | BEGIN_INTERFACE 173 | 174 | HRESULT ( STDMETHODCALLTYPE *QueryInterface )( 175 | IScriptControl * This, 176 | /* [in] */ REFIID riid, 177 | /* [annotation][iid_is][out] */ 178 | _COM_Outptr_ void **ppvObject); 179 | 180 | ULONG ( STDMETHODCALLTYPE *AddRef )( 181 | IScriptControl * This); 182 | 183 | ULONG ( STDMETHODCALLTYPE *Release )( 184 | IScriptControl * This); 185 | 186 | HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )( 187 | IScriptControl * This, 188 | /* [out] */ UINT *pctinfo); 189 | 190 | HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )( 191 | IScriptControl * This, 192 | /* [in] */ UINT iTInfo, 193 | /* [in] */ LCID lcid, 194 | /* [out] */ ITypeInfo **ppTInfo); 195 | 196 | HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )( 197 | IScriptControl * This, 198 | /* [in] */ REFIID riid, 199 | /* [size_is][in] */ LPOLESTR *rgszNames, 200 | /* [range][in] */ UINT cNames, 201 | /* [in] */ LCID lcid, 202 | /* [size_is][out] */ DISPID *rgDispId); 203 | 204 | /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )( 205 | IScriptControl * This, 206 | /* [annotation][in] */ 207 | _In_ DISPID dispIdMember, 208 | /* [annotation][in] */ 209 | _In_ REFIID riid, 210 | /* [annotation][in] */ 211 | _In_ LCID lcid, 212 | /* [annotation][in] */ 213 | _In_ WORD wFlags, 214 | /* [annotation][out][in] */ 215 | _In_ DISPPARAMS *pDispParams, 216 | /* [annotation][out] */ 217 | _Out_opt_ VARIANT *pVarResult, 218 | /* [annotation][out] */ 219 | _Out_opt_ EXCEPINFO *pExcepInfo, 220 | /* [annotation][out] */ 221 | _Out_opt_ UINT *puArgErr); 222 | 223 | /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Language )( 224 | IScriptControl * This, 225 | /* [retval][out] */ BSTR *pbstrLanguage); 226 | 227 | /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Language )( 228 | IScriptControl * This, 229 | /* [in] */ BSTR pbstrLanguage); 230 | 231 | /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_State )( 232 | IScriptControl * This, 233 | /* [retval][out] */ ScriptControlStates *pssState); 234 | 235 | /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_State )( 236 | IScriptControl * This, 237 | /* [in] */ ScriptControlStates pssState); 238 | 239 | /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_SitehWnd )( 240 | IScriptControl * This, 241 | /* [in] */ long phwnd); 242 | 243 | /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SitehWnd )( 244 | IScriptControl * This, 245 | /* [retval][out] */ long *phwnd); 246 | 247 | /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Timeout )( 248 | IScriptControl * This, 249 | /* [retval][out] */ long *plMilleseconds); 250 | 251 | /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_Timeout )( 252 | IScriptControl * This, 253 | /* [in] */ long plMilleseconds); 254 | 255 | /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_AllowUI )( 256 | IScriptControl * This, 257 | /* [retval][out] */ VARIANT_BOOL *pfAllowUI); 258 | 259 | /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_AllowUI )( 260 | IScriptControl * This, 261 | /* [in] */ VARIANT_BOOL pfAllowUI); 262 | 263 | /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_UseSafeSubset )( 264 | IScriptControl * This, 265 | /* [retval][out] */ VARIANT_BOOL *pfUseSafeSubset); 266 | 267 | /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_UseSafeSubset )( 268 | IScriptControl * This, 269 | /* [in] */ VARIANT_BOOL pfUseSafeSubset); 270 | 271 | /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Modules )( 272 | IScriptControl * This, 273 | /* [retval][out] */ IDispatch **ppmods); 274 | 275 | /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Error )( 276 | IScriptControl * This, 277 | /* [retval][out] */ IDispatch **ppse); 278 | 279 | /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_CodeObject )( 280 | IScriptControl * This, 281 | /* [retval][out] */ IDispatch **ppdispObject); 282 | 283 | /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_Procedures )( 284 | IScriptControl * This, 285 | /* [retval][out] */ IDispatch **ppdispProcedures); 286 | 287 | /* [hidden][id] */ HRESULT ( STDMETHODCALLTYPE *_AboutBox )( 288 | IScriptControl * This); 289 | 290 | /* [id] */ HRESULT ( STDMETHODCALLTYPE *AddObject )( 291 | IScriptControl * This, 292 | /* [in] */ BSTR Name, 293 | /* [in] */ IDispatch *Object, 294 | /* [defaultvalue][optional][in] */ VARIANT_BOOL AddMembers); 295 | 296 | /* [id] */ HRESULT ( STDMETHODCALLTYPE *Reset )( 297 | IScriptControl * This); 298 | 299 | /* [id] */ HRESULT ( STDMETHODCALLTYPE *AddCode )( 300 | IScriptControl * This, 301 | /* [in] */ BSTR Code); 302 | 303 | /* [id] */ HRESULT ( STDMETHODCALLTYPE *Eval )( 304 | IScriptControl * This, 305 | /* [in] */ BSTR Expression, 306 | /* [retval][out] */ VARIANT *pvarResult); 307 | 308 | /* [id] */ HRESULT ( STDMETHODCALLTYPE *ExecuteStatement )( 309 | IScriptControl * This, 310 | /* [in] */ BSTR Statement); 311 | 312 | /* [vararg][id] */ HRESULT ( STDMETHODCALLTYPE *Run )( 313 | IScriptControl * This, 314 | /* [in] */ BSTR ProcedureName, 315 | /* [in] */ SAFEARRAY * *Parameters, 316 | /* [retval][out] */ VARIANT *pvarResult); 317 | 318 | END_INTERFACE 319 | } IScriptControlVtbl; 320 | 321 | interface IScriptControl 322 | { 323 | CONST_VTBL struct IScriptControlVtbl *lpVtbl; 324 | }; 325 | 326 | 327 | 328 | #ifdef COBJMACROS 329 | 330 | 331 | #define IScriptControl_QueryInterface(This,riid,ppvObject) \ 332 | ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) ) 333 | 334 | #define IScriptControl_AddRef(This) \ 335 | ( (This)->lpVtbl -> AddRef(This) ) 336 | 337 | #define IScriptControl_Release(This) \ 338 | ( (This)->lpVtbl -> Release(This) ) 339 | 340 | 341 | #define IScriptControl_GetTypeInfoCount(This,pctinfo) \ 342 | ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) ) 343 | 344 | #define IScriptControl_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \ 345 | ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) ) 346 | 347 | #define IScriptControl_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \ 348 | ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) ) 349 | 350 | #define IScriptControl_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \ 351 | ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) ) 352 | 353 | 354 | #define IScriptControl_get_Language(This,pbstrLanguage) \ 355 | ( (This)->lpVtbl -> get_Language(This,pbstrLanguage) ) 356 | 357 | #define IScriptControl_put_Language(This,pbstrLanguage) \ 358 | ( (This)->lpVtbl -> put_Language(This,pbstrLanguage) ) 359 | 360 | #define IScriptControl_get_State(This,pssState) \ 361 | ( (This)->lpVtbl -> get_State(This,pssState) ) 362 | 363 | #define IScriptControl_put_State(This,pssState) \ 364 | ( (This)->lpVtbl -> put_State(This,pssState) ) 365 | 366 | #define IScriptControl_put_SitehWnd(This,phwnd) \ 367 | ( (This)->lpVtbl -> put_SitehWnd(This,phwnd) ) 368 | 369 | #define IScriptControl_get_SitehWnd(This,phwnd) \ 370 | ( (This)->lpVtbl -> get_SitehWnd(This,phwnd) ) 371 | 372 | #define IScriptControl_get_Timeout(This,plMilleseconds) \ 373 | ( (This)->lpVtbl -> get_Timeout(This,plMilleseconds) ) 374 | 375 | #define IScriptControl_put_Timeout(This,plMilleseconds) \ 376 | ( (This)->lpVtbl -> put_Timeout(This,plMilleseconds) ) 377 | 378 | #define IScriptControl_get_AllowUI(This,pfAllowUI) \ 379 | ( (This)->lpVtbl -> get_AllowUI(This,pfAllowUI) ) 380 | 381 | #define IScriptControl_put_AllowUI(This,pfAllowUI) \ 382 | ( (This)->lpVtbl -> put_AllowUI(This,pfAllowUI) ) 383 | 384 | #define IScriptControl_get_UseSafeSubset(This,pfUseSafeSubset) \ 385 | ( (This)->lpVtbl -> get_UseSafeSubset(This,pfUseSafeSubset) ) 386 | 387 | #define IScriptControl_put_UseSafeSubset(This,pfUseSafeSubset) \ 388 | ( (This)->lpVtbl -> put_UseSafeSubset(This,pfUseSafeSubset) ) 389 | 390 | #define IScriptControl_get_Modules(This,ppmods) \ 391 | ( (This)->lpVtbl -> get_Modules(This,ppmods) ) 392 | 393 | #define IScriptControl_get_Error(This,ppse) \ 394 | ( (This)->lpVtbl -> get_Error(This,ppse) ) 395 | 396 | #define IScriptControl_get_CodeObject(This,ppdispObject) \ 397 | ( (This)->lpVtbl -> get_CodeObject(This,ppdispObject) ) 398 | 399 | #define IScriptControl_get_Procedures(This,ppdispProcedures) \ 400 | ( (This)->lpVtbl -> get_Procedures(This,ppdispProcedures) ) 401 | 402 | #define IScriptControl__AboutBox(This) \ 403 | ( (This)->lpVtbl -> _AboutBox(This) ) 404 | 405 | #define IScriptControl_AddObject(This,Name,Object,AddMembers) \ 406 | ( (This)->lpVtbl -> AddObject(This,Name,Object,AddMembers) ) 407 | 408 | #define IScriptControl_Reset(This) \ 409 | ( (This)->lpVtbl -> Reset(This) ) 410 | 411 | #define IScriptControl_AddCode(This,Code) \ 412 | ( (This)->lpVtbl -> AddCode(This,Code) ) 413 | 414 | #define IScriptControl_Eval(This,Expression,pvarResult) \ 415 | ( (This)->lpVtbl -> Eval(This,Expression,pvarResult) ) 416 | 417 | #define IScriptControl_ExecuteStatement(This,Statement) \ 418 | ( (This)->lpVtbl -> ExecuteStatement(This,Statement) ) 419 | 420 | #define IScriptControl_Run(This,ProcedureName,Parameters,pvarResult) \ 421 | ( (This)->lpVtbl -> Run(This,ProcedureName,Parameters,pvarResult) ) 422 | 423 | #endif /* COBJMACROS */ 424 | 425 | 426 | #endif /* C style interface */ 427 | 428 | 429 | 430 | 431 | #endif /* __IScriptControl_INTERFACE_DEFINED__ */ 432 | 433 | 434 | 435 | #ifndef __IScriptControl_LIBRARY_DEFINED__ 436 | #define __IScriptControl_LIBRARY_DEFINED__ 437 | 438 | /* library IScriptControl */ 439 | /* [uuid][version] */ 440 | 441 | 442 | 443 | EXTERN_C const IID LIBID_IScriptControl; 444 | #endif /* __IScriptControl_LIBRARY_DEFINED__ */ 445 | 446 | /* Additional Prototypes for ALL interfaces */ 447 | 448 | unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * ); 449 | unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * ); 450 | unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * ); 451 | void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * ); 452 | 453 | unsigned long __RPC_USER LPSAFEARRAY_UserSize( unsigned long *, unsigned long , LPSAFEARRAY * ); 454 | unsigned char * __RPC_USER LPSAFEARRAY_UserMarshal( unsigned long *, unsigned char *, LPSAFEARRAY * ); 455 | unsigned char * __RPC_USER LPSAFEARRAY_UserUnmarshal(unsigned long *, unsigned char *, LPSAFEARRAY * ); 456 | void __RPC_USER LPSAFEARRAY_UserFree( unsigned long *, LPSAFEARRAY * ); 457 | 458 | unsigned long __RPC_USER VARIANT_UserSize( unsigned long *, unsigned long , VARIANT * ); 459 | unsigned char * __RPC_USER VARIANT_UserMarshal( unsigned long *, unsigned char *, VARIANT * ); 460 | unsigned char * __RPC_USER VARIANT_UserUnmarshal(unsigned long *, unsigned char *, VARIANT * ); 461 | void __RPC_USER VARIANT_UserFree( unsigned long *, VARIANT * ); 462 | 463 | unsigned long __RPC_USER BSTR_UserSize64( unsigned long *, unsigned long , BSTR * ); 464 | unsigned char * __RPC_USER BSTR_UserMarshal64( unsigned long *, unsigned char *, BSTR * ); 465 | unsigned char * __RPC_USER BSTR_UserUnmarshal64(unsigned long *, unsigned char *, BSTR * ); 466 | void __RPC_USER BSTR_UserFree64( unsigned long *, BSTR * ); 467 | 468 | unsigned long __RPC_USER LPSAFEARRAY_UserSize64( unsigned long *, unsigned long , LPSAFEARRAY * ); 469 | unsigned char * __RPC_USER LPSAFEARRAY_UserMarshal64( unsigned long *, unsigned char *, LPSAFEARRAY * ); 470 | unsigned char * __RPC_USER LPSAFEARRAY_UserUnmarshal64(unsigned long *, unsigned char *, LPSAFEARRAY * ); 471 | void __RPC_USER LPSAFEARRAY_UserFree64( unsigned long *, LPSAFEARRAY * ); 472 | 473 | unsigned long __RPC_USER VARIANT_UserSize64( unsigned long *, unsigned long , VARIANT * ); 474 | unsigned char * __RPC_USER VARIANT_UserMarshal64( unsigned long *, unsigned char *, VARIANT * ); 475 | unsigned char * __RPC_USER VARIANT_UserUnmarshal64(unsigned long *, unsigned char *, VARIANT * ); 476 | void __RPC_USER VARIANT_UserFree64( unsigned long *, VARIANT * ); 477 | 478 | /* end of Additional Prototypes */ 479 | 480 | #ifdef __cplusplus 481 | } 482 | #endif 483 | 484 | #endif 485 | 486 | 487 | -------------------------------------------------------------------------------- /tsc64_2008.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 10.00 3 | # Visual C++ Express 2008 4 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tsc64", "tsc64\tsc64.vcproj", "{BDD47254-2D2A-4984-920A-D52D65949630}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|Win32 = Debug|Win32 9 | Debug|x64 = Debug|x64 10 | Release|Win32 = Release|Win32 11 | Release|x64 = Release|x64 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {BDD47254-2D2A-4984-920A-D52D65949630}.Debug|Win32.ActiveCfg = Debug|Win32 15 | {BDD47254-2D2A-4984-920A-D52D65949630}.Debug|Win32.Build.0 = Debug|Win32 16 | {BDD47254-2D2A-4984-920A-D52D65949630}.Debug|x64.ActiveCfg = Debug|x64 17 | {BDD47254-2D2A-4984-920A-D52D65949630}.Debug|x64.Build.0 = Debug|x64 18 | {BDD47254-2D2A-4984-920A-D52D65949630}.Release|Win32.ActiveCfg = Release|Win32 19 | {BDD47254-2D2A-4984-920A-D52D65949630}.Release|Win32.Build.0 = Release|Win32 20 | {BDD47254-2D2A-4984-920A-D52D65949630}.Release|x64.ActiveCfg = Release|x64 21 | {BDD47254-2D2A-4984-920A-D52D65949630}.Release|x64.Build.0 = Release|x64 22 | EndGlobalSection 23 | GlobalSection(SolutionProperties) = preSolution 24 | HideSolutionNode = FALSE 25 | EndGlobalSection 26 | EndGlobal 27 | -------------------------------------------------------------------------------- /tsc64_2010.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual C++ Express 2010 4 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tsc64", "tsc64\tsc64.vcxproj", "{BDD47254-2D2A-4984-920A-D52D65949630}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|Win32 = Debug|Win32 9 | Debug|x64 = Debug|x64 10 | Release|Win32 = Release|Win32 11 | Release|x64 = Release|x64 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {BDD47254-2D2A-4984-920A-D52D65949630}.Debug|Win32.ActiveCfg = Debug|Win32 15 | {BDD47254-2D2A-4984-920A-D52D65949630}.Debug|Win32.Build.0 = Debug|Win32 16 | {BDD47254-2D2A-4984-920A-D52D65949630}.Debug|x64.ActiveCfg = Debug|x64 17 | {BDD47254-2D2A-4984-920A-D52D65949630}.Debug|x64.Build.0 = Debug|x64 18 | {BDD47254-2D2A-4984-920A-D52D65949630}.Release|Win32.ActiveCfg = Release|Win32 19 | {BDD47254-2D2A-4984-920A-D52D65949630}.Release|Win32.Build.0 = Release|Win32 20 | {BDD47254-2D2A-4984-920A-D52D65949630}.Release|x64.ActiveCfg = Release|x64 21 | {BDD47254-2D2A-4984-920A-D52D65949630}.Release|x64.Build.0 = Release|x64 22 | EndGlobalSection 23 | GlobalSection(SolutionProperties) = preSolution 24 | HideSolutionNode = FALSE 25 | EndGlobalSection 26 | EndGlobal 27 | --------------------------------------------------------------------------------