summaryrefslogtreecommitdiff
path: root/plugins/IEView/src/external_funcs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/IEView/src/external_funcs.cpp')
-rw-r--r--plugins/IEView/src/external_funcs.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/plugins/IEView/src/external_funcs.cpp b/plugins/IEView/src/external_funcs.cpp
new file mode 100644
index 0000000000..26f07d490e
--- /dev/null
+++ b/plugins/IEView/src/external_funcs.cpp
@@ -0,0 +1,45 @@
+#include "stdafx.h"
+
+namespace External
+{
+ HRESULT db_get(DISPPARAMS *pDispParams, VARIANT *pVarResult)
+ {
+ if (pDispParams->cArgs == 3 && pDispParams && pVarResult)
+ {
+ MCONTACT hContact = pDispParams->rgvarg[2].vt == VT_INT ? pDispParams->rgvarg[2].intVal : NULL;
+ BSTR szModule = pDispParams->rgvarg[1].vt == VT_BSTR ? pDispParams->rgvarg[1].bstrVal : NULL;
+ BSTR szSetting = pDispParams->rgvarg[0].vt == VT_BSTR ? pDispParams->rgvarg[0].bstrVal : NULL;
+
+ DBVARIANT dbv = { 0 };
+
+ db_get(hContact, _T2A((TCHAR*)szModule), _T2A((TCHAR*)szSetting), &dbv);
+
+ switch (dbv.type)
+ {
+ case DBVT_BYTE:
+ pVarResult->bVal = dbv.bVal;
+ pVarResult->vt = VT_BOOL;
+ break;
+ case DBVT_WCHAR:
+ pVarResult->vt = VT_BSTR;
+ pVarResult->bstrVal = ::SysAllocString(dbv.pwszVal);
+ break;
+ case DBVT_UTF8:
+ pVarResult->vt = VT_BSTR;
+ pVarResult->bstrVal = ::SysAllocString(ptrW(mir_utf8decodeW(dbv.pszVal)));
+ break;
+ case DBVT_ASCIIZ:
+ pVarResult->vt = VT_BSTR;
+ pVarResult->bstrVal = ::SysAllocString(_A2T(dbv.pszVal));
+ break;
+ case DBVT_DWORD:
+ pVarResult->vt = VT_INT;
+ pVarResult->intVal = dbv.dVal;
+ }
+
+
+ return S_OK;
+ }
+ return E_INVALIDARG;
+ }
+} \ No newline at end of file