This is a discussion on RUNTIME_CLASS and VIEWS in a dll - Programmer ; Gentlemen, I would like to ask you about the following problem. I have read with interest how people have used AFX_DATA to overcome problems with views that are derived from MFC base classes in dlls. I would like to ask ...
Gentlemen,
I would like to ask you about the following problem. I have read with
interest how people have used AFX_DATA to overcome problems with views
that are derived from MFC base classes in dlls. I would like to ask
your thoughts on the following problem:
I have an .exe that uses a splitter window. This window is used to
display various different CFormView derived classes. The literature
points to using the CreateView method of the splitterwnd to create the
new view to display. The general syntax of this is
CreateView(row, col, CRuntimeClass*, CCreateContext* );
As the view that I wish to put here is to be a CFormView derived class
of type unknown at compile or link time I decided the following
my .dll would have the following (abbreviated)
__declspec(dllexport) CRuntimeClass* getRuntimeClass() {
RUNTIME_CLASS(CmyformView); }
and my class is
class __declspec(dllexport) CMyFormView : public CFromView
{
};
with the dll having the resources etc for the FormView.
This way I tried to add the view from the dll as
hlib = LoadLibrary("...");
fn=GetProcAddress(hlib, "getRuntimeClass");
splitterWnd->CreateView(0,1, getRuntimeClass(), &context);
This always fails in the call to
IsDerivedFrom(CWnd)which is a part of the CreateView call.
It seems that although when debugging through the code that the
m_pBaseClass member of my CMyFormView class is indeed derived from a
CWnd class the actual comparison method used is the following pointer
comparison
pClassThis == pBaseClass
What am I missing. I can see that defining the _AFXDLL uses an
alternate base class derivation method - will it fix it and if so why
when I define _AFXDLL does this always result in compile errors.
Thanks guys I really appreciate any light you can throw on this one.
P.S. the .exe is statically linked with MFC and the .dll I haved tried
both statically and dynamically - neither seems to work
What am I missing here?