Misha Koshelev : msi: automation: Implement View::Modify.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon May 14 10:52:49 CDT 2007
Module: wine
Branch: master
Commit: 9d234fcb9f6afcf3ef7ab9df668d55f945a58a0a
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9d234fcb9f6afcf3ef7ab9df668d55f945a58a0a
Author: Misha Koshelev <mk144210 at bcm.edu>
Date: Fri May 11 14:08:43 2007 -0500
msi: automation: Implement View::Modify.
---
dlls/msi/automation.c | 18 ++++++++++++++++++
dlls/msi/msiserver.idl | 20 ++++++++++++++++++++
dlls/msi/msiserver_dispids.h | 1 +
dlls/msi/tests/automation.c | 29 ++++++++++++-----------------
4 files changed, 51 insertions(+), 17 deletions(-)
diff --git a/dlls/msi/automation.c b/dlls/msi/automation.c
index e314be0..b9dcb5a 100644
--- a/dlls/msi/automation.c
+++ b/dlls/msi/automation.c
@@ -735,6 +735,24 @@ static HRESULT WINAPI ViewImpl_Invoke(
else return DISP_E_MEMBERNOTFOUND;
break;
+ case DISPID_VIEW_MODIFY:
+ if (wFlags & DISPATCH_METHOD)
+ {
+ hr = DispGetParam(pDispParams, 0, VT_I4, &varg0, puArgErr);
+ if (FAILED(hr)) return hr;
+ hr = DispGetParam(pDispParams, 1, VT_DISPATCH, &varg1, puArgErr);
+ if (FAILED(hr)) return hr;
+ if (!V_DISPATCH(&varg1)) return DISP_E_EXCEPTION;
+ if ((ret = MsiViewModify(This->msiHandle, V_I4(&varg0), ((AutomationObject *)V_DISPATCH(&varg1))->msiHandle)) != ERROR_SUCCESS)
+ {
+ VariantClear(&varg1);
+ ERR("MsiViewModify returned %d\n", ret);
+ return DISP_E_EXCEPTION;
+ }
+ }
+ else return DISP_E_MEMBERNOTFOUND;
+ break;
+
case DISPID_VIEW_CLOSE:
if (wFlags & DISPATCH_METHOD)
{
diff --git a/dlls/msi/msiserver.idl b/dlls/msi/msiserver.idl
index f47b691..560b572 100644
--- a/dlls/msi/msiserver.idl
+++ b/dlls/msi/msiserver.idl
@@ -124,6 +124,22 @@ library WindowsInstaller
methods:
}
+ typedef enum {
+ msiViewModifySeek = -1,
+ msiViewModifyRefresh = 0,
+ msiViewModifyInsert = 1,
+ msiViewModifyUpdate = 2,
+ msiViewModifyAssign = 3,
+ msiViewModifyReplace = 4,
+ msiViewModifyMerge = 5,
+ msiViewModifyDelete = 6,
+ msiViewModifyInsertTemporary = 7,
+ msiViewModifyValidate = 8,
+ msiViewModifyValidateNew = 9,
+ msiViewModifyValidateField = 10,
+ msiViewModifyValidateDelete = 11,
+ } _MsiViewModify; /* Added underscore to avoid conflict with function name */
+
[ uuid(000C109C-0000-0000-C000-000000000046) ]
dispinterface View
{
@@ -133,6 +149,10 @@ library WindowsInstaller
void Execute([in, optional, defaultvalue(0)] Record *Params);
[id(DISPID_VIEW_FETCH)]
Record* Fetch();
+ [id(DISPID_VIEW_MODIFY)]
+ void Modify(
+ [in] _MsiViewModify Mode,
+ Record *Record);
[id(DISPID_VIEW_CLOSE)]
void Close();
}
diff --git a/dlls/msi/msiserver_dispids.h b/dlls/msi/msiserver_dispids.h
index 88d6d53..ebcab7d 100644
--- a/dlls/msi/msiserver_dispids.h
+++ b/dlls/msi/msiserver_dispids.h
@@ -30,6 +30,7 @@
#define DISPID_VIEW_EXECUTE 1
#define DISPID_VIEW_FETCH 2
+#define DISPID_VIEW_MODIFY 3
#define DISPID_VIEW_CLOSE 4
#define DISPID_DATABASE_OPENVIEW 3
diff --git a/dlls/msi/tests/automation.c b/dlls/msi/tests/automation.c
index b3c661e..4aaa671 100644
--- a/dlls/msi/tests/automation.c
+++ b/dlls/msi/tests/automation.c
@@ -1071,27 +1071,22 @@ static void test_Database(IDispatch *pDatabase)
ok_exception(hr, szStringDataField);
/* View::Modify with incorrect parameters */
- todo_wine
- {
- hr = View_Modify(pView, -5, NULL);
- ok(hr == DISP_E_EXCEPTION, "View_Modify failed, hresult 0x%08x\n", hr);
- ok_exception(hr, szModifyModeRecord);
+ hr = View_Modify(pView, -5, NULL);
+ ok(hr == DISP_E_EXCEPTION, "View_Modify failed, hresult 0x%08x\n", hr);
+ ok_exception(hr, szModifyModeRecord);
- hr = View_Modify(pView, -5, pRecord);
- ok(hr == DISP_E_EXCEPTION, "View_Modify failed, hresult 0x%08x\n", hr);
- ok_exception(hr, szModifyModeRecord);
+ hr = View_Modify(pView, -5, pRecord);
+ ok(hr == DISP_E_EXCEPTION, "View_Modify failed, hresult 0x%08x\n", hr);
+ ok_exception(hr, szModifyModeRecord);
- hr = View_Modify(pView, MSIMODIFY_REFRESH, NULL);
- ok(hr == DISP_E_EXCEPTION, "View_Modify failed, hresult 0x%08x\n", hr);
- ok_exception(hr, szModifyModeRecord);
- }
+ hr = View_Modify(pView, MSIMODIFY_REFRESH, NULL);
+ ok(hr == DISP_E_EXCEPTION, "View_Modify failed, hresult 0x%08x\n", hr);
+ ok_exception(hr, szModifyModeRecord);
/* View::Modify with MSIMODIFY_REFRESH should undo our changes */
- todo_wine
- {
- hr = View_Modify(pView, MSIMODIFY_REFRESH, pRecord);
- ok(SUCCEEDED(hr), "View_Modify failed, hresult 0x%08x\n", hr);
- }
+ hr = View_Modify(pView, MSIMODIFY_REFRESH, pRecord);
+ /* Wine's MsiViewModify currently does not support MSIMODIFY_REFRESH */
+ todo_wine ok(SUCCEEDED(hr), "View_Modify failed, hresult 0x%08x\n", hr);
/* Record::StringDataGet, confirm that the record is back to its unmodified value */
memset(szString, 0, sizeof(szString));
More information about the wine-cvs
mailing list