Crash when Destroying a Custom Control
I have a custom control that I modeled off of the CustomControl Tutorial example. It is working fine except when my game terminates and the renderer used with these controls goes out of scope and gets deleted I see a crash and in the call stack I can see it is due to calling the destructor on my control. I am using Ogre so the specific time of the error is at the end of the Noesis_Shutdown function. I am not sure if there is something wrong with the control or how I have my dll set up. Any help would be appreciated.
Here is the code for the control:
Header:
CPP:
Here is the code for the control:
Header:
Code: Select all
#include "stdafx.h"
#pragma warning(disable: 4275)
#pragma warning(disable: 4251)
#include <Noesis.h>
#include <NsGui/UserControl.h>
#include <NsGui/UIElementData.h>
#include <NsGui/FrameworkPropertyMetaData.h>
#include <NsGui/RoutedEvent.h>
#include <NsCore/ReflectionImplement.h>
#include <NsCore/TypeId.h>
#include <NsCore/Package.h>
using namespace Noesis;
using namespace Noesis::Core;
using namespace Noesis::Gui;
/*!
* This class represents a common control to display information about a song in the songwheel
*/
class SongSelect: public UserControl
{
public:
NS_DLL_EXPORT
void setTitleText(const NsString& value);
NS_DLL_EXPORT
void setArtistText(const NsString& value);
NS_DLL_EXPORT
void setScoreText(const NsString& value);
NS_DLL_EXPORT
void setGradeText(const NsString& value);
NS_DLL_EXPORT
void setPackTitleText(const NsString& value);
NS_DLL_EXPORT
const NsString& getTitleText() const;
NS_DLL_EXPORT
const NsString& getArtistText() const;
NS_DLL_EXPORT
const NsString& getScoreText() const;
NS_DLL_EXPORT
const NsString& getGradeText() const;
NS_DLL_EXPORT
const NsString& getPackTitleText() const;
public:
static const DependencyProperty* TitleTextProperty;
static const DependencyProperty* ArtistTextProperty;
static const DependencyProperty* ScoreTextProperty;
static const DependencyProperty* GradeTextProperty;
static const DependencyProperty* PackTitleTextProperty;
private:
NS_IMPLEMENT_INLINE_REFLECTION(SongSelect, UserControl)
{
NsMeta<TypeId>("SongSelect");
NsProp("TitleText", &SongSelect::getTitleText, &SongSelect::setTitleText);
NsProp("ArtistText", &SongSelect::getArtistText, &SongSelect::setArtistText);
NsProp("ScoreText", &SongSelect::getScoreText, &SongSelect::setScoreText);
NsProp("GradeText", &SongSelect::getGradeText, &SongSelect::setGradeText);
NsProp("PackTitleText", &SongSelect::getPackTitleText, &SongSelect::setPackTitleText);
NsString source = "Gui/WKDX/song_select_element.xaml";
Ptr<UIElementData> data = NsMeta<UIElementData>(TypeOf<SelfClass>());
NsString defualtTitle = "Title";
NsString defualtArtist = "Artist";
NsString defualtScore = "Score";
NsString defualtGrade = "Grade";
NsString defualtPackTitle = "Pack Title";
data->RegisterProperty<NsString>(TitleTextProperty, "TitleText",
FrameworkPropertyMetadata::Create(defualtTitle, FrameworkOptions_None));
data->RegisterProperty<NsString>(ArtistTextProperty, "ArtistText",
FrameworkPropertyMetadata::Create(defualtArtist, FrameworkOptions_None));
data->RegisterProperty<NsString>(ScoreTextProperty, "ScoreText",
FrameworkPropertyMetadata::Create(defualtScore, FrameworkOptions_None));
data->RegisterProperty<NsString>(GradeTextProperty, "GradeText",
FrameworkPropertyMetadata::Create(defualtGrade, FrameworkOptions_None));
data->RegisterProperty<NsString>(PackTitleTextProperty, "PackTitleText",
FrameworkPropertyMetadata::Create(defualtPackTitle, FrameworkOptions_None));
data->OverrideMetadata<NsString>(UserControl::SourceProperty, "Source",
FrameworkPropertyMetadata::Create(source, FrameworkOptions_None));
}
};
Code: Select all
#include "stdafx.h"
#pragma warning(disable: 4275)
#pragma warning(disable: 4251)
#include "SongSelect.h"
using namespace Noesis;
using namespace Noesis::Core;
using namespace Noesis::Gui;
const DependencyProperty* SongSelect::TitleTextProperty;
const DependencyProperty* SongSelect::ArtistTextProperty;
const DependencyProperty* SongSelect::ScoreTextProperty;
const DependencyProperty* SongSelect::GradeTextProperty;
const DependencyProperty* SongSelect::PackTitleTextProperty;
NS_DLL_EXPORT
const NsString& SongSelect::getTitleText() const
{
return DependencyObject::GetValue<NsString>(TitleTextProperty);
}
NS_DLL_EXPORT
void SongSelect::setTitleText(const NsString& value)
{
DependencyObject::SetValue<NsString>(TitleTextProperty, value);
}
NS_DLL_EXPORT
const NsString& SongSelect::getArtistText() const
{
return DependencyObject::GetValue<NsString>(ArtistTextProperty);
}
NS_DLL_EXPORT
void SongSelect::setArtistText(const NsString& value)
{
DependencyObject::SetValue<NsString>(ArtistTextProperty, value);
}
NS_DLL_EXPORT
const NsString& SongSelect::getScoreText() const
{
return DependencyObject::GetValue<NsString>(ScoreTextProperty);
}
NS_DLL_EXPORT
void SongSelect::setScoreText(const NsString& value)
{
DependencyObject::SetValue<NsString>(ScoreTextProperty, value);
}
NS_DLL_EXPORT
const NsString& SongSelect::getGradeText() const
{
return DependencyObject::GetValue<NsString>(GradeTextProperty);
}
NS_DLL_EXPORT
void SongSelect::setGradeText(const NsString& value)
{
DependencyObject::SetValue<NsString>(GradeTextProperty, value);
}
NS_DLL_EXPORT
const NsString& SongSelect::getPackTitleText() const
{
return DependencyObject::GetValue<NsString>(PackTitleTextProperty);
}
NS_DLL_EXPORT
void SongSelect::setPackTitleText(const NsString& value)
{
DependencyObject::SetValue<NsString>(PackTitleTextProperty, value);
}
-
sfernandez
Site Admin
- Posts: 2991
- Joined:
Re: Crash when Destroying a Custom Control
Hi,
Do you mean that your user control constructor is called after NsGetKernel()->Shutdown() (inside Noesis_Shutdown)?
Do you keep any global reference to your user control?
Do you mean that your user control constructor is called after NsGetKernel()->Shutdown() (inside Noesis_Shutdown)?
Do you keep any global reference to your user control?
Re: Crash when Destroying a Custom Control
No my constructor is not called though I can see the destructor being called in the call stack. I do not keep any references to the control around. The control is also quite simple - it's just some TextBlocks and Rectanges so I suspect this may be a problem with how my dll is set up though I am unsure how to debug that.
Re: Crash when Destroying a Custom Control
Hi!
Could you send us the project in private? (or file a bug in the tracker and attach the project)
Thanks!
Could you send us the project in private? (or file a bug in the tracker and attach the project)
Thanks!
Re: Crash when Destroying a Custom Control
I've sent you the project. Thank you for taking a look at it!
Who is online
Users browsing this forum: Bing [Bot] and 7 guests