diff options
author | Harald Radi <phanto@php.net> | 2001-02-17 02:16:29 +0000 |
---|---|---|
committer | Harald Radi <phanto@php.net> | 2001-02-17 02:16:29 +0000 |
commit | 55f25fb9423db649c5ea76558083dcb944675f00 (patch) | |
tree | 6c16811019b9f4b567ba249a9abe82daef0afe75 /ext/rpc/com/com_wrapper.c | |
parent | 08009cfd394e49dd4123708288f7a972344e936e (diff) | |
download | php-git-55f25fb9423db649c5ea76558083dcb944675f00.tar.gz |
multiple codepage support
export global constants
Diffstat (limited to 'ext/rpc/com/com_wrapper.c')
-rw-r--r-- | ext/rpc/com/com_wrapper.c | 56 |
1 files changed, 38 insertions, 18 deletions
diff --git a/ext/rpc/com/com_wrapper.c b/ext/rpc/com/com_wrapper.c index 7ab103d5df..f1af638d90 100644 --- a/ext/rpc/com/com_wrapper.c +++ b/ext/rpc/com/com_wrapper.c @@ -81,6 +81,7 @@ PHP_FUNCTION(com_propget); PHP_FUNCTION(com_propput); static int le_idispatch; +static int codepage; function_entry COM_functions[] = { PHP_FE(COM_load, NULL) @@ -125,7 +126,7 @@ static char *php_string_from_clsid(const CLSID clsid) char *clsid_str; StringFromCLSID(clsid, &ole_clsid); - clsid_str = php_OLECHAR_to_char(ole_clsid, NULL, 0); + clsid_str = php_OLECHAR_to_char(ole_clsid, NULL, 0, codepage); LocalFree(ole_clsid); return clsid_str; @@ -210,7 +211,7 @@ PHP_INI_END() Loads a COM module */ PHP_FUNCTION(COM_load) { - pval *module_name, *server_name=NULL; + pval *module_name, *server_name=NULL, *code_page; CLSID clsid; HRESULT hr; OLECHAR *ProgID; @@ -221,6 +222,7 @@ PHP_FUNCTION(COM_load) switch (ZEND_NUM_ARGS()) { case 1: getParameters(ht, 1, &module_name); + codepage = CP_ACP; break; case 2: if (!INI_INT("allow_dcom")) { @@ -229,6 +231,24 @@ PHP_FUNCTION(COM_load) } getParameters(ht, 2, &module_name, &server_name); convert_to_string(server_name); + codepage = CP_ACP; + break; + case 3: + if (!INI_INT("allow_dcom")) { + php_error(E_WARNING, "DCOM is disabled"); + RETURN_FALSE; + } + getParameters(ht, 3, &module_name, &server_name, &code_page); + + if (server_name->type == IS_NULL) { + efree(server_name); + server_name = NULL; + } + else + convert_to_string(server_name); + + convert_to_long(code_page); + codepage = code_page->value.lval; break; default: WRONG_PARAM_COUNT; @@ -236,7 +256,7 @@ PHP_FUNCTION(COM_load) } convert_to_string(module_name); - ProgID = php_char_to_OLECHAR(module_name->value.str.val, module_name->value.str.len); + ProgID = php_char_to_OLECHAR(module_name->value.str.val, module_name->value.str.len, codepage); hr = CLSIDFromProgID(ProgID, &clsid); efree(ProgID); @@ -257,7 +277,7 @@ PHP_FUNCTION(COM_load) server_info.dwReserved1=0; server_info.dwReserved2=0; - server_info.pwszName = php_char_to_OLECHAR(server_name->value.str.val, server_name->value.str.len); + server_info.pwszName = php_char_to_OLECHAR(server_name->value.str.val, server_name->value.str.len, codepage); server_info.pAuthInfo=NULL; pResults.pIID = &IID_IDispatch; @@ -296,7 +316,7 @@ int do_COM_invoke(IDispatch *i_dispatch, pval *function_name, VARIANTARG *var_re int current_arg, current_variant; DISPPARAMS dispparams; - funcname = php_char_to_OLECHAR(function_name->value.str.val, function_name->value.str.len); + funcname = php_char_to_OLECHAR(function_name->value.str.val, function_name->value.str.len, codepage); hr = i_dispatch->GetIDsOfNames(IID_NULL, &funcname, 1, LOCALE_SYSTEM_DEFAULT, &dispid); @@ -312,7 +332,7 @@ int do_COM_invoke(IDispatch *i_dispatch, pval *function_name, VARIANTARG *var_re for (current_arg=0; current_arg<arg_count; current_arg++) { current_variant = arg_count - current_arg - 1; - php_pval_to_variant(arguments[current_arg], &variant_args[current_variant]); + php_pval_to_variant(arguments[current_arg], &variant_args[current_variant], codepage); } dispparams.rgvarg = variant_args; @@ -377,7 +397,7 @@ PHP_FUNCTION(COM_invoke) } efree(arguments); - php_variant_to_pval(&var_result, return_value, 0); + php_variant_to_pval(&var_result, return_value, 0, codepage); } /* }}} */ @@ -413,7 +433,7 @@ static int do_COM_propget(VARIANTARG *var_result, IDispatch *i_dispatch, pval *a /* obtain property handler */ - propname = php_char_to_OLECHAR(arg_property->value.str.val, arg_property->value.str.len); + propname = php_char_to_OLECHAR(arg_property->value.str.val, arg_property->value.str.len, codepage); hr = i_dispatch->GetIDsOfNames(IID_NULL, &propname, 1, LOCALE_SYSTEM_DEFAULT, &dispid); @@ -465,7 +485,7 @@ static void do_COM_propput(pval *return_value, IDispatch *i_dispatch, pval *arg_ /* obtain property handler */ - propname = php_char_to_OLECHAR(arg_property->value.str.val, arg_property->value.str.len); + propname = php_char_to_OLECHAR(arg_property->value.str.val, arg_property->value.str.len, codepage); hr = i_dispatch->GetIDsOfNames(IID_NULL, &propname, 1, LOCALE_SYSTEM_DEFAULT, &dispid); @@ -478,7 +498,7 @@ static void do_COM_propput(pval *return_value, IDispatch *i_dispatch, pval *arg_ } - php_pval_to_variant(value, &new_value); + php_pval_to_variant(value, &new_value, codepage); dispparams.rgvarg = &new_value; dispparams.rgdispidNamedArgs = &mydispid; dispparams.cArgs = 1; @@ -504,7 +524,7 @@ static void do_COM_propput(pval *return_value, IDispatch *i_dispatch, pval *arg_ if (SUCCEEDED(hr)) { - php_variant_to_pval(&var_result, return_value, 0); + php_variant_to_pval(&var_result, return_value, 0, codepage); } else { *return_value = *value; zval_copy_ctor(return_value); @@ -539,7 +559,7 @@ PHP_FUNCTION(com_propget) if (do_COM_propget(&var_result, i_dispatch, arg_property, 0)==FAILURE) { RETURN_FALSE; } - php_variant_to_pval(&var_result, return_value, 0); + php_variant_to_pval(&var_result, return_value, 0, codepage); } /* }}} */ @@ -638,7 +658,7 @@ PHPAPI pval php_COM_get_property_handler(zend_property_reference *property_refer pval result; VARIANTARG var_result = _php_COM_get_property_handler(property_reference); - php_variant_to_pval(&var_result, &result, 0); + php_variant_to_pval(&var_result, &result, 0, codepage); return result; } @@ -747,7 +767,7 @@ PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_pro } pval_destructor(&function_name->element); efree(arguments); - php_variant_to_pval(&var_result, return_value, 0); + php_variant_to_pval(&var_result, return_value, 0, codepage); } for (overloaded_property = (zend_overloaded_element *) zend_llist_get_first(property_reference->elements_list); @@ -775,7 +795,7 @@ static int php_COM_load_typelib(char *typelib_name, int mode) int interfaces; ELS_FETCH(); - p = php_char_to_OLECHAR(typelib_name, strlen(typelib_name)); + p = php_char_to_OLECHAR(typelib_name, strlen(typelib_name), codepage); if (FAILED(LoadTypeLib(p, &TypeLib))) { efree(p); @@ -799,7 +819,7 @@ static int php_COM_load_typelib(char *typelib_name, int mode) char *EnumId; TypeLib->lpVtbl->GetDocumentation(TypeLib, i, &bstr_EnumId, NULL, NULL, NULL); - EnumId = php_OLECHAR_to_char(bstr_EnumId, NULL, 0); + EnumId = php_OLECHAR_to_char(bstr_EnumId, NULL, 0, codepage); printf("Enumeration %d - %s:\n", i, EnumId); efree(EnumId); #endif @@ -818,10 +838,10 @@ static int php_COM_load_typelib(char *typelib_name, int mode) continue; } LocalFree(bstr_ids); - ids = php_OLECHAR_to_char(bstr_ids, NULL, 1); + ids = php_OLECHAR_to_char(bstr_ids, NULL, 1, codepage); c.name_len = strlen(ids)+1; c.name = ids; - php_variant_to_pval(pVarDesc->lpvarValue, &c.value, 1); + php_variant_to_pval(pVarDesc->lpvarValue, &c.value, 1, codepage); c.flags = mode; zend_register_constant(&c ELS_CC); |