"AND" "OR"  
Главная Информер Журнал Форум Wiki DRKB Помощь проекту


unresolved externals when using RUNTIME_CLASS

kellyw@mailgate.seer.com
Friday, October 11, 1996

Environment: NT4.0/VC4.2

I am getting the following unresolved externals: 
------------------------------------------------------------------------------ 
ADWB.obj : error LNK2001: unresolved external symbol "public: static struct 
CRuntimeClass const  doc::classdoc"(?classdoc@doc@@2UCRuntimeClass@@B) ADWB.obj 
: error LNK2001: unresolved external symbol "public: static struct CRuntimeClass
const  frame::classframe"(?classframe@frame@@2UCRuntimeClass@@B) ADWB.obj : 
error LNK2001: unresolved external symbol "public: static struct CRuntimeClass 
const  view::classview"(?classview@view@@2UCRuntimeClass@@B) Debug/ADWB.exe : 
fatal error LNK1120: 3 unresolved externals 
------------------------------------------------------------------------------


The unresolved externals occur whenever doc, frame, and view are exported from 
another dll:
------------------------------------------------------------------------------  
pDocTemplate = new CMultiDocTemplate(  resID,
RUNTIME_CLASS(doc),
RUNTIME_CLASS(frame),
RUNTIME_CLASS(view));
------------------------------------------------------------------------------


Here's the DllMain of my DLL containing doc, frame, and view: 
------------------------------------------------------------------------------ 
static AFX_EXTENSION_MODULE CmnDLL = { NULL, NULL };
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) {
if (dwReason == DLL_PROCESS_ATTACH)
{
TRACE0("CMN.DLL Initializing!\n");

// Extension DLL one-time initialization AfxInitExtensionModule(CmnDLL, 
hInstance);

// Insert this DLL into the resource chain new CDynLinkLibrary(CmnDLL);
}
else if (dwReason == DLL_PROCESS_DETACH) {
TRACE0("CMN.DLL Terminating!\n");
}
return 1;   // ok
}
-------------------------------------------------------------------------------


Thanks for any help
Kelly




David Little -- dlittle@communique.net
Monday, October 14, 1996

[Mini-digest: 2 responses]

Anybody that is upgrading (or has upgraded) to 4.2 that gets unresolveds =
should CHECK ALL YOUR INCLUDE PATHS FOR DUPLICATE HEADER =
FILES!!!!!!!!!!!!!

----------
From: 	kellyw@mailgate.seer.com[SMTP:kellyw@mailgate.seer.com]
Sent: 	Friday, October 11, 1996 1:18 PM
To: 	mfc-l@netcom.com
Subject: 	unresolved externals when using RUNTIME_CLASS

Environment: NT4.0/VC4.2

I am getting the following unresolved externals:=20
-------------------------------------------------------------------------=
-----=20
ADWB.obj : error LNK2001: unresolved external symbol "public: static =
struct=20
CRuntimeClass const  doc::classdoc"(?classdoc@doc@@2UCRuntimeClass@@B) =
ADWB.obj=20
: error LNK2001: unresolved external symbol "public: static struct =
CRuntimeClass
const  frame::classframe"(?classframe@frame@@2UCRuntimeClass@@B) =
ADWB.obj :=20
error LNK2001: unresolved external symbol "public: static struct =
CRuntimeClass=20
const  view::classview"(?classview@view@@2UCRuntimeClass@@B) =
Debug/ADWB.exe :=20
fatal error LNK1120: 3 unresolved externals=20
-------------------------------------------------------------------------=
-----


The unresolved externals occur whenever doc, frame, and view are =
exported from=20
another dll:
-------------------------------------------------------------------------=
----- =20
pDocTemplate =3D new CMultiDocTemplate(  resID,
RUNTIME_CLASS(doc),
RUNTIME_CLASS(frame),
RUNTIME_CLASS(view));
-------------------------------------------------------------------------=
-----


Here's the DllMain of my DLL containing doc, frame, and view:=20
-------------------------------------------------------------------------=
-----=20
static AFX_EXTENSION_MODULE CmnDLL =3D { NULL, NULL };
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) {
if (dwReason =3D=3D DLL_PROCESS_ATTACH)
{
TRACE0("CMN.DLL Initializing!\n");

// Extension DLL one-time initialization AfxInitExtensionModule(CmnDLL,=20
hInstance);

// Insert this DLL into the resource chain new CDynLinkLibrary(CmnDLL);
}
else if (dwReason =3D=3D DLL_PROCESS_DETACH) {
TRACE0("CMN.DLL Terminating!\n");
}
return 1;   // ok
}
-------------------------------------------------------------------------=
------


Thanks for any help
Kelly


-----From: Dave_Rabbers@Quinton-Eng.CCMAIL.CompuServe.COM

It appears you may not have exported the class interface properly.

In your .h file defining your classes, you need to do something like the 
following:

#if defined something_only_defined_when_compiling_the_dll
#define this_dll_export         __declspec( dllexport )
#else
#define this_dll_export         __declspec( dllimport )
#endif

where the two symbols, one tested, the other defined, are named uniquely to your
dll.  Then define your classes as:

class this_dll_export MyClassName : public CDocument

(or whatever).

You need to "dllexport" when compiling all source files from the DLL containing 
your exported class.  You need to "dllimport" when compiling any other DLL or 
EXE.  Since some DLLs will dllexport their own stuff while dllimport'ing stuff 
from other DLLs, you need to be careful in your naming, as suggested above.





Joseph Jones -- jjones@FrontofficeTech.com
Monday, October 14, 1996

[Mini-digest: 2 responses]

Are you sure you declared the neccessary IMPLEMENT_XXX Macros in your
Dll? These macros are what provide the RuntimeClass Information for MFC.

joe


>-----Original Message-----
>From:	kellyw@mailgate.seer.com [SMTP:kellyw@mailgate.seer.com]
>Sent:	Friday, October 11, 1996 7:18 PM
>To:	mfc-l@netcom.com
>Subject:	unresolved externals when using RUNTIME_CLASS
>
>Environment: NT4.0/VC4.2
>
>I am getting the following unresolved externals: 
>------------------------------------------------------------------------
>------ 
>ADWB.obj : error LNK2001: unresolved external symbol "public: static
>struct 
>CRuntimeClass const  doc::classdoc"(?classdoc@doc@@2UCRuntimeClass@@B)
>ADWB.obj 
>: error LNK2001: unresolved external symbol "public: static struct
>CRuntimeClass
>const  frame::classframe"(?classframe@frame@@2UCRuntimeClass@@B)
>ADWB.obj : 
>error LNK2001: unresolved external symbol "public: static struct
>CRuntimeClass 
>const  view::classview"(?classview@view@@2UCRuntimeClass@@B)
>Debug/ADWB.exe : 
>fatal error LNK1120: 3 unresolved externals 
>------------------------------------------------------------------------
>------
>
>
>The unresolved externals occur whenever doc, frame, and view are
>exported from 
>another dll:
>------------------------------------------------------------------------
>------  
>pDocTemplate = new CMultiDocTemplate(  resID,
>RUNTIME_CLASS(doc),
>RUNTIME_CLASS(frame),
>RUNTIME_CLASS(view));
>------------------------------------------------------------------------
>------
>
>
>Here's the DllMain of my DLL containing doc, frame, and view: 
>------------------------------------------------------------------------
>------ 
>static AFX_EXTENSION_MODULE CmnDLL = { NULL, NULL };
>extern "C" int APIENTRY
>DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) {
>if (dwReason == DLL_PROCESS_ATTACH)
>{
>TRACE0("CMN.DLL Initializing!\n");
>
>// Extension DLL one-time initialization AfxInitExtensionModule(CmnDLL,
>
>hInstance);
>
>// Insert this DLL into the resource chain new CDynLinkLibrary(CmnDLL);
>}
>else if (dwReason == DLL_PROCESS_DETACH) {
>TRACE0("CMN.DLL Terminating!\n");
>}
>return 1;   // ok
>}
>------------------------------------------------------------------------
>-------
>
>
>Thanks for any help
>Kelly
>
-----From: "Sanjay Chouksey" 

Hi, 
You need to export the message map too.
Generate the .map file and look for the message
map name mangled function names, and then
export them from the .DEF file. "Inside Visual C++"
by Kuglinski is an excellent source for more info,
on this. (You are writing an MFC extension DLL,
I suppose)

Sanjay





| Вернуться в корень Архива |