Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash when trying to load library. #348

Open
rogerbusquets97 opened this issue Oct 11, 2022 · 3 comments
Open

Crash when trying to load library. #348

rogerbusquets97 opened this issue Oct 11, 2022 · 3 comments

Comments

@rogerbusquets97
Copy link

I'm trying to load a dll that is registering types to rttr. But the application crashes when callling library.Load().
Apparently the issue is triggered here:
array_range<type> type::get_types() RTTR_NOEXCEPT { auto& type_list = detail::type_register_private::get_instance().get_type_storage(); return array_range<type>(&type_list[1], type_list.size() - 1); }
type_list has only 1 element, so it is out of bounds when accessing like type_list[1] i guess.
Maybe I am doing something wrong. I've been following the documentation though.
My dll has in a cpp file the following:
`#include "components.h"
#include <rttr/registration>
using namespace rttr;

RTTR_PLUGIN_REGISTRATION
{
rttr::registration::class_("test")
.constructor<>()
.property("i", &test::i);

rttr::registration::class_<test2>("test2")
.constructor<>()
.property("d", &test2::d);

}
And my application is trying to load it like this:library lib("game_gameplay"); // file suffix is not needed, will be automatically appended
lib.load();`

It crashes after calling load. AFAIK it is everything needed according to the documentation. Am I missing something.
dll is properly created. And I've been able to load it and get func ptr using windows API. But I'd like to use rttr method.

@tommybowles
Copy link

did you ever solve this? seeing the same thing

@ConorDamery
Copy link

Welp sad to see no one has commented on this, but I have the same issue, I've fixed it by changing the code to &type_list[0], and it does call my registration function on the DLL, however, it doesn't seem to get registered properly as the returned type is invalid (type::is_valid == false). Would be nice if one of the devs could chip in!

@ConorDamery
Copy link

So, I guess I have a partial solution, the reason why the app crashes on the line type_list[1] is when no types are registered and if you try to call this function you get the crash. I'll assume this is a bug the devs missed because if you use the lib you will likely have at least one type registered. However, that brings us to the issue of having types registered but still getting the crash, this happens when you statically link to the library, specifically with the option BUILD_STATIC ON. When done this way and using shared libraries across your app, each instance of a shared lib gets its different static storage, defeating the point of it. So now you know the cause, I don't have a fix other than using RTTR as a shared lib, unfortunately.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants