c++.stlsoft - x64 WinSTL issue with registry and scoped_handle: Urgent help needed
- Austin Ziegler (33/33) Sep 11 2008 I have an issue with scoped_handle on x64 that I need rather urgent assi...
- Matthew Wilson (5/36) Sep 11 2008 scoped_handle are. The problem is an exception being thrown on line 161 ...
- Matthew Wilson (9/40) Sep 22 2008 Austin
- Austin Ziegler (3/6) Sep 30 2008 Will do. If the changes are similar to the patches we sent you, this sho...
- Gabor.Fischer systecs.com (Gabor Fischer) (9/70) Jul 28 2010 Hello Matthew,
- Gabor.Fischer systecs.com (Gabor Fischer) (47/53) Oct 20 2010 The problem ist still present in STLSOFT 1.9.101. This simple program ca...
- Gabor.Fischer systecs.com (Gabor Fischer) (5/56) Dec 08 2010 Hell Matthew,
- Matt Wilson (3/62) Dec 26 2010 This should now be addressed with the latest version: 1.9.105
- Gabor.Fischer systecs.com (Gabor Fischer) (4/5) Jan 10 2011 Yes, it works now. :-) Thanks.
I have an issue with scoped_handle on x64 that I need rather urgent assistance with. I feel like I'm actually close to figuring out the problem, but getting lost in the corners of how abstracted things like scoped_handle are. The problem is an exception being thrown on line 161 of scoped_handle.hpp: static void translate(holder_type& h, degenerate_function_type pv) { function_type fn = reinterpret_cast<function_type>(pv); STLSOFT_ASSERT(!h.bPointer); STLSOFT_MESSAGE_ASSERT("function pointer must not be NULL", NULL != fn); fn(h.u.h); // <-- Here's line 161 } The call that's causing this problem is around this: // trying to get HKU/.DEFAULT/Environment std::wstring hku_env_rk = FilenameHelper::join(m_userid_wstr, SystemConfiguration::HKU_ENVIRONMENT_RK_SUBPATH); try { reg_value_sequence_w env(HKEY_USERS, hku_env_rk.c_str()); for (reg_value_sequence_w::const_iterator envvar = env.begin(); env.end() != envvar; ++envvar) { ... } } catch (const registry_exception&) { } catch (...) { } The exception thrown is not a registry_exception, but it might be an invalid_calling_convention_exception. We have that secondary catch (...), but that's completely inappropriate as we are not able to complete this code path on x64 at all. I've got a sample program, but it includes some of our source code that I can't post to a public newsgroup. Can you contact me off-group to arrange the source? I can do any testing necessary if you don't have an x64 server ready for this. -austin
Sep 11 2008
Am just doing a Pantheios release, and then will attend to this. Will email you separately now ... "Austin Ziegler" <austin.ziegler evault.com> wrote in message news:gac0hg$gau$1 digitalmars.com...I have an issue with scoped_handle on x64 that I need rather urgent assistance with. I feel like I'm actually close to figuring out the problem, but getting lost in the corners of how abstracted things likescoped_handle are. The problem is an exception being thrown on line 161 of scoped_handle.hpp:static void translate(holder_type& h, degenerate_function_type pv) { function_type fn = reinterpret_cast<function_type>(pv); STLSOFT_ASSERT(!h.bPointer); STLSOFT_MESSAGE_ASSERT("function pointer must not be NULL", NULL != fn); fn(h.u.h); // <-- Here's line 161 } The call that's causing this problem is around this: // trying to get HKU/.DEFAULT/Environment std::wstring hku_env_rk = FilenameHelper::join(m_userid_wstr, SystemConfiguration::HKU_ENVIRONMENT_RK_SUBPATH); try { reg_value_sequence_w env(HKEY_USERS, hku_env_rk.c_str()); for (reg_value_sequence_w::const_iterator envvar = env.begin(); env.end() != envvar; ++envvar) { ... } } catch (const registry_exception&) { } catch (...) { } The exception thrown is not a registry_exception, but it might be an invalid_calling_convention_exception. We have that secondary catch (...), but that's completely inappropriate as we are not able to complete this code path on x64 atall. I've got a sample program, but it includes some of our source code that I can't post to a public newsgroup. Can you contact me off-group to arrange the source? I can do any testing necessary if you don't have an x64 server ready for this.-austin
Sep 11 2008
Austin Just checking this one off as complete. Can you let me know whether you get any issues with the next release - 1.9.55 - which should be out today/tomorrow. Cheers Matt "Austin Ziegler" <austin.ziegler evault.com> wrote in message news:gac0hg$gau$1 digitalmars.com...I have an issue with scoped_handle on x64 that I need rather urgent assistance with. I feel like I'm actually close to figuring out the problem, but getting lost in the corners of how abstracted things likescoped_handle are. The problem is an exception being thrown on line 161 of scoped_handle.hpp:static void translate(holder_type& h, degenerate_function_type pv) { function_type fn = reinterpret_cast<function_type>(pv); STLSOFT_ASSERT(!h.bPointer); STLSOFT_MESSAGE_ASSERT("function pointer must not be NULL", NULL != fn); fn(h.u.h); // <-- Here's line 161 } The call that's causing this problem is around this: // trying to get HKU/.DEFAULT/Environment std::wstring hku_env_rk = FilenameHelper::join(m_userid_wstr, SystemConfiguration::HKU_ENVIRONMENT_RK_SUBPATH); try { reg_value_sequence_w env(HKEY_USERS, hku_env_rk.c_str()); for (reg_value_sequence_w::const_iterator envvar = env.begin(); env.end() != envvar; ++envvar) { ... } } catch (const registry_exception&) { } catch (...) { } The exception thrown is not a registry_exception, but it might be an invalid_calling_convention_exception. We have that secondary catch (...), but that's completely inappropriate as we are not able to complete this code path on x64 atall. I've got a sample program, but it includes some of our source code that I can't post to a public newsgroup. Can you contact me off-group to arrange the source? I can do any testing necessary if you don't have an x64 server ready for this.-austin
Sep 22 2008
Matthew Wilson Wrote:Just checking this one off as complete. Can you let me know whether you get any issues with the next release - 1.9.55 - which should be out today/tomorrow.Will do. If the changes are similar to the patches we sent you, this shouldn't be a problem. -austin
Sep 30 2008
Hello Matthew, I have the same problem with the latest version of STLSOFT (1.9.99) and Visual Studio 2008 running under Windows 7 x64. The Exception thrown is stlsoft::winstl_project::invalid_calling_convention_exception. It happens when I try to iterate over a reg_value_sequence. I traced it back to the very same line as Austin (see quoted message below), but didn't get further. It complains about an unsupported calling convention "S".AustinJust checking this one off as complete.Can you let me know whether you get any issues with the next release - 1.9.55 - which should be out today/tomorrow.CheersMatt"Austin Ziegler" <austin.ziegler evault.com> wrote in message news:gac0hg$gau$1 digitalmars.com...So Long... GaborI have an issue with scoped_handle on x64 that I need rather urgent assistance with. I feel like I'm actually close to figuring out the problem, but getting lost in the corners of how abstracted things likescoped_handle are. The problem is an exception being thrown on line 161 of scoped_handle.hpp:static void translate(holder_type& h, degenerate_function_type pv) { function_type fn = reinterpret_cast<function_type>(pv); STLSOFT_ASSERT(!h.bPointer); STLSOFT_MESSAGE_ASSERT("function pointer must not be NULL", NULL != fn); fn(h.u.h); // <-- Here's line 161 } The call that's causing this problem is around this: // trying to get HKU/.DEFAULT/Environment std::wstring hku_env_rk = FilenameHelper::join(m_userid_wstr, SystemConfiguration::HKU_ENVIRONMENT_RK_SUBPATH); try { reg_value_sequence_w env(HKEY_USERS, hku_env_rk.c_str()); for (reg_value_sequence_w::const_iterator envvar = env.begin(); env.end() != envvar; ++envvar) { ... } } catch (const registry_exception&) { } catch (...) { } The exception thrown is not a registry_exception, but it might be an invalid_calling_convention_exception. We have that secondary catch (...), but that's completely inappropriate as we are not able to complete this code path on x64 atall. I've got a sample program, but it includes some of our source code that I can't post to a public newsgroup. Can you contact me off-group to arrange the source? I can do any testing necessary if you don't have an x64 server ready for this.-austin
Jul 28 2010
Hello Matthew, On July 28th I wrote:I have the same problem with the latest version of STLSOFT (1.9.99) and Visual Studio 2008 running under Windows 7 x64. The Exception thrown is stlsoft::winstl_project::invalid_calling_convention_exception. It happens when I try to iterate over a reg_value_sequence. I traced it back to the very same line as Austin (see quoted message below), but didn't get further. It complains about an unsupported calling convention "S".The problem ist still present in STLSOFT 1.9.101. This simple program can reproduce the problem: #include "stdafx.h" #include <iostream> #include <algorithm> #include "winstl/registry/reg_key_sequence.hpp" void print(const winstl::reg_key& key) { std::cout << key.name().c_str() << std::endl; } int _tmain(int argc, _TCHAR* argv[]) { try { winstl::reg_key_sequence keys(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion")); std::for_each(keys.begin(), keys.end(), print); return 0; } catch (std::exception& e) { std::cout << e.what() << std::endl; return 1; } } I debugged the program to find out what the problem is, and in winstl.h I found following definitions: #if defined(WIN64) #elif defined(WIN32) #else /* ? WIN?? */ #endif /* WIN?? */ But WIN64 wasn't defined. _WIN64 was. So, I added following lines to my test program, before the include of reg_key_sequence.h: #ifdef _WIN64 #define WIN64 #endif Then everything worked fine. So I googled a bit, and it seems that, for Win64 projects, _WIN64 is automatically defined, whereas WIN64 is not. So, to correct this problem, the line in winstl.h should be changed to "#if defined (_WIN64)". So Long... Gabor
Oct 20 2010
Hell Matthew, The problem still exists in STLSOFT 1.9.104. The suggested workaround still works, but it should be included into STLSOFT.I have the same problem with the latest version of STLSOFT (1.9.99) and Visual Studio 2008 running under Windows 7 x64. The Exception thrown is stlsoft::winstl_project::invalid_calling_convention_exception. It happens when I try to iterate over a reg_value_sequence. I traced it back to the very same line as Austin (see quoted message below), but didn't get further. It complains about an unsupported calling convention "S".The problem ist still present in STLSOFT 1.9.101. This simple program can reproduce the problem:#include "stdafx.h" #include <iostream> #include <algorithm> #include "winstl/registry/reg_key_sequence.hpp"void print(const winstl::reg_key& key) { std::cout << key.name().c_str() << std::endl; }int _tmain(int argc, _TCHAR* argv[]) { try { winstl::reg_key_sequence keys(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion"));std::for_each(keys.begin(), keys.end(), print); return 0; }catch (std::exception& e) { std::cout << e.what() << std::endl; return 1; } }I debugged the program to find out what the problem is, and in winstl.h I found following definitions:#if defined(WIN64) #elif defined(WIN32) #else /* ? WIN?? */ #endif /* WIN?? */But WIN64 wasn't defined. _WIN64 was. So, I added following lines to my test program, before the include of reg_key_sequence.h:#ifdef _WIN64 #define WIN64 #endifThen everything worked fine. So I googled a bit, and it seems that, for Win64 projects, _WIN64 is automatically defined, whereas WIN64 is not. So, to correct this problem, the line in winstl.h should be changed to "#if defined (_WIN64)".So Long...GaborSo Long... Gabor
Dec 08 2010
This should now be addressed with the latest version: 1.9.105 "Gabor Fischer" <Gabor.Fischer systecs.com> wrote in message news:BbS9VkAKQNB systecs.com...Hell Matthew, The problem still exists in STLSOFT 1.9.104. The suggested workaround still works, but it should be included into STLSOFT.I have the same problem with the latest version of STLSOFT (1.9.99) and Visual Studio 2008 running under Windows 7 x64. The Exception thrown is stlsoft::winstl_project::invalid_calling_convention_exception. It happens when I try to iterate over a reg_value_sequence. I traced it back to the very same line as Austin (see quoted message below), but didn't get further. It complains about an unsupported calling convention "S".The problem ist still present in STLSOFT 1.9.101. This simple program can reproduce the problem:#include "stdafx.h" #include <iostream> #include <algorithm> #include "winstl/registry/reg_key_sequence.hpp"void print(const winstl::reg_key& key) { std::cout << key.name().c_str() << std::endl; }int _tmain(int argc, _TCHAR* argv[]) { try { winstl::reg_key_sequence keys(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion"));std::for_each(keys.begin(), keys.end(), print); return 0; }catch (std::exception& e) { std::cout << e.what() << std::endl; return 1; } }I debugged the program to find out what the problem is, and in winstl.h I found following definitions:#if defined(WIN64) #elif defined(WIN32) #else /* ? WIN?? */ #endif /* WIN?? */But WIN64 wasn't defined. _WIN64 was. So, I added following lines to my test program, before the include of reg_key_sequence.h:#ifdef _WIN64 #define WIN64 #endifThen everything worked fine. So I googled a bit, and it seems that, for Win64 projects, _WIN64 is automatically defined, whereas WIN64 is not. So, to correct this problem, the line in winstl.h should be changed to "#if defined (_WIN64)".So Long...GaborSo Long... Gabor
Dec 26 2010
Hello Matthew!This should now be addressed with the latest version: 1.9.105Yes, it works now. :-) Thanks. So Long... Gabor
Jan 10 2011