Browse Source

sys/windows: fix file picker dialog

hikari 3 years ago
parent
commit
ae57a49915
3 changed files with 59 additions and 3 deletions
  1. 0 2
      core/sys/windows/comdlg32.odin
  2. 21 0
      core/sys/windows/ole32.odin
  3. 38 1
      core/sys/windows/types.odin

+ 0 - 2
core/sys/windows/comdlg32.odin

@@ -27,8 +27,6 @@ OPENFILENAMEW :: struct {
 	lCustData: 	        LPARAM,
 	lpfnHook: 	        LPOFNHOOKPROC,
 	lpTemplateName: 	wstring,
-	lpEditInfo: 	        rawptr, // LPEDITMENU,
-	lpstrPrompt: 	        wstring,
 	pvReserved:             rawptr,
 	dwReserved:             DWORD,
 	FlagsEx:                DWORD,

+ 21 - 0
core/sys/windows/ole32.odin

@@ -11,8 +11,29 @@ COINIT :: enum DWORD {
 	SPEED_OVER_MEMORY = 0x8,
 }
 
+IUnknown :: struct {
+	using Vtbl: ^IUnknownVtbl,
+}
+IUnknownVtbl :: struct {
+	QueryInterface : proc "std" (This: ^IUnknown, riid: REFIID, ppvObject: ^rawptr) -> HRESULT,
+	AddRef         : proc "std" (This: ^IUnknown) -> ULONG,
+	Release        : proc "std" (This: ^IUnknown) -> ULONG,
+}
+
+LPUNKNOWN :: ^IUnknown
+
 @(default_calling_convention="stdcall")
 foreign Ole32 {
 	CoInitializeEx :: proc(reserved: rawptr, co_init: COINIT) -> HRESULT ---
 	CoUninitialize :: proc() ---
+
+	CoCreateInstance :: proc(
+		rclsid: REFCLSID,
+		pUnkOuter: LPUNKNOWN,
+		dwClsContext: DWORD,
+		riid: REFIID,
+		ppv: ^LPVOID,
+	) -> HRESULT ---
+
+	CoTaskMemFree :: proc(pv: rawptr) ---
 }

+ 38 - 1
core/sys/windows/types.odin

@@ -40,6 +40,7 @@ BYTE :: distinct u8
 BOOLEAN :: distinct b8
 GROUP :: distinct c_uint
 LARGE_INTEGER :: distinct c_longlong
+ULARGE_INTEGER :: distinct c_ulonglong
 LONG :: c_long
 UINT :: c_uint
 INT  :: c_int
@@ -121,6 +122,8 @@ LPWSADATA :: ^WSADATA
 LPWSAPROTOCOL_INFO :: ^WSAPROTOCOL_INFO
 LPSTR :: ^CHAR
 LPWSTR :: ^WCHAR
+OLECHAR :: WCHAR
+LPOLESTR :: ^OLECHAR
 LPFILETIME :: ^FILETIME
 LPWSABUF :: ^WSABUF
 LPWSAOVERLAPPED :: distinct rawptr
@@ -1639,7 +1642,41 @@ PGUID   :: ^GUID
 PCGUID  :: ^GUID
 LPGUID  :: ^GUID
 LPCGUID :: ^GUID
-
+REFIID  :: ^GUID
+
+REFGUID :: GUID
+IID :: GUID
+CLSID :: GUID
+REFCLSID :: ^CLSID
+
+CLSCTX_INPROC_SERVER                  :: 0x1
+CLSCTX_INPROC_HANDLER                 :: 0x2
+CLSCTX_LOCAL_SERVER                   :: 0x4
+CLSCTX_INPROC_SERVER16                :: 0x8
+CLSCTX_REMOTE_SERVER                  :: 0x10
+CLSCTX_INPROC_HANDLER16               :: 0x20
+CLSCTX_RESERVED1                      :: 0x40
+CLSCTX_RESERVED2                      :: 0x80
+CLSCTX_RESERVED3                      :: 0x100
+CLSCTX_RESERVED4                      :: 0x200
+CLSCTX_NO_CODE_DOWNLOAD               :: 0x400
+CLSCTX_RESERVED5                      :: 0x800
+CLSCTX_NO_CUSTOM_MARSHAL              :: 0x1000
+CLSCTX_ENABLE_CODE_DOWNLOAD           :: 0x2000
+CLSCTX_NO_FAILURE_LOG                 :: 0x4000
+CLSCTX_DISABLE_AAA                    :: 0x8000
+CLSCTX_ENABLE_AAA                     :: 0x10000
+CLSCTX_FROM_DEFAULT_CONTEXT           :: 0x20000
+CLSCTX_ACTIVATE_X86_SERVER            :: 0x40000
+CLSCTX_ACTIVATE_32_BIT_SERVER         :: CLSCTX_ACTIVATE_X86_SERVER
+CLSCTX_ACTIVATE_64_BIT_SERVER         :: 0x80000
+CLSCTX_ENABLE_CLOAKING                :: 0x100000
+CLSCTX_APPCONTAINER                   :: 0x400000
+CLSCTX_ACTIVATE_AAA_AS_IU             :: 0x800000
+CLSCTX_RESERVED6                      :: 0x1000000
+CLSCTX_ACTIVATE_ARM32_SERVER          :: 0x2000000
+CLSCTX_ALLOW_LOWER_TRUST_REGISTRATION :: 0x4000000
+CLSCTX_PS_DLL                         :: 0x80000000
 
 WSAPROTOCOLCHAIN :: struct {
 	ChainLen: c_int,