Module: wine Branch: master Commit: 7eb3db632e592a05ff209b6965d13d2e5b8bdc63 URL: http://source.winehq.org/git/wine.git/?a=commit;h=7eb3db632e592a05ff209b6965...
Author: Misha Koshelev mk144210@bcm.edu Date: Fri May 11 14:07:58 2007 -0500
msi: automation: Implement Installer::CreateRecord.
---
dlls/msi/automation.c | 24 ++++++++++++++++++++++++ dlls/msi/msiserver.idl | 2 ++ dlls/msi/msiserver_dispids.h | 1 + dlls/msi/tests/automation.c | 32 ++++++++++++++++---------------- 4 files changed, 43 insertions(+), 16 deletions(-)
diff --git a/dlls/msi/automation.c b/dlls/msi/automation.c index 56f163a..d871fa2 100644 --- a/dlls/msi/automation.c +++ b/dlls/msi/automation.c @@ -1115,6 +1115,30 @@ static HRESULT WINAPI InstallerImpl_Invoke(
switch (dispIdMember) { + case DISPID_INSTALLER_CREATERECORD: + if (wFlags & DISPATCH_METHOD) + { + hr = DispGetParam(pDispParams, 0, VT_I4, &varg0, puArgErr); + if (FAILED(hr)) return hr; + V_VT(pVarResult) = VT_DISPATCH; + if ((msiHandle = MsiCreateRecord(V_I4(&varg0)))) + { + if (SUCCEEDED(hr = create_automation_object(msiHandle, NULL, (LPVOID*)&pDispatch, &DIID_Record, RecordImpl_Invoke, NULL, 0))) + { + IDispatch_AddRef(pDispatch); + V_DISPATCH(pVarResult) = pDispatch; + } + else + ERR("Failed to create Record object, hresult 0x%08x\n", hr); + } + else + { + ERR("MsiCreateRecord failed\n"); + return DISP_E_EXCEPTION; + } + } + break; + case DISPID_INSTALLER_OPENPACKAGE: if (wFlags & DISPATCH_METHOD) { diff --git a/dlls/msi/msiserver.idl b/dlls/msi/msiserver.idl index cd6621f..e02f194 100644 --- a/dlls/msi/msiserver.idl +++ b/dlls/msi/msiserver.idl @@ -59,6 +59,8 @@ library WindowsInstaller { properties: methods: + [id(DISPID_INSTALLER_CREATERECORD)] + Record *CreateRecord([in] long Count); [id(DISPID_INSTALLER_OPENPACKAGE)] Session* OpenPackage( [in] VARIANT PackagePath, diff --git a/dlls/msi/msiserver_dispids.h b/dlls/msi/msiserver_dispids.h index e85f750..b65726e 100644 --- a/dlls/msi/msiserver_dispids.h +++ b/dlls/msi/msiserver_dispids.h @@ -16,6 +16,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */
+#define DISPID_INSTALLER_CREATERECORD 1 #define DISPID_INSTALLER_OPENPACKAGE 2 #define DISPID_INSTALLER_REGISTRYVALUE 11 #define DISPID_INSTALLER_PRODUCTSTATE 17 diff --git a/dlls/msi/tests/automation.c b/dlls/msi/tests/automation.c index cbe48d0..5a34459 100644 --- a/dlls/msi/tests/automation.c +++ b/dlls/msi/tests/automation.c @@ -312,9 +312,7 @@ static DISPID get_dispid( IDispatch *disp, const char *name )
static void test_dispid(void) { - todo_wine { ok( get_dispid( pInstaller, "CreateRecord" ) == 1, "dispid wrong\n"); - } ok( get_dispid( pInstaller, "OpenPackage" ) == 2, "dispid wrong\n"); todo_wine { ok( get_dispid( pInstaller, "OpenProduct" ) == 3, "dispid wrong\n"); @@ -1350,25 +1348,27 @@ static void test_Installer(void) if (!pInstaller) return;
/* Installer::CreateRecord */ - todo_wine { - /* Test for error */ - hr = Installer_CreateRecord(-1, &pRecord); - ok(hr == DISP_E_EXCEPTION, "Installer_CreateRecord failed, hresult 0x%08x\n", hr); - ok_exception(hr, szCreateRecordException); - - /* Test for success */ - hr = Installer_CreateRecord(1, &pRecord); - ok(SUCCEEDED(hr), "Installer_CreateRecord failed, hresult 0x%08x\n", hr); - ok(pRecord != NULL, "Installer_CreateRecord should not have returned NULL record\n"); - } + + /* Test for error */ + hr = Installer_CreateRecord(-1, &pRecord); + ok(hr == DISP_E_EXCEPTION, "Installer_CreateRecord failed, hresult 0x%08x\n", hr); + ok_exception(hr, szCreateRecordException); + + /* Test for success */ + hr = Installer_CreateRecord(1, &pRecord); + ok(SUCCEEDED(hr), "Installer_CreateRecord failed, hresult 0x%08x\n", hr); + ok(pRecord != NULL, "Installer_CreateRecord should not have returned NULL record\n"); if (pRecord) { int iFieldCount = 0;
/* Record::FieldCountGet */ - hr = Record_FieldCountGet(pRecord, &iFieldCount); - ok(SUCCEEDED(hr), "Record_FiledCountGet failed, hresult 0x%08x\n", hr); - ok(iFieldCount == 1, "Record_FieldCountGet result was %d but expected 1\n", iFieldCount); + todo_wine + { + hr = Record_FieldCountGet(pRecord, &iFieldCount); + ok(SUCCEEDED(hr), "Record_FiledCountGet failed, hresult 0x%08x\n", hr); + ok(iFieldCount == 1, "Record_FieldCountGet result was %d but expected 1\n", iFieldCount); + }
IDispatch_Release(pRecord); }