Re: dll dependencies
On Jun 12, 2:37 pm, "Victor Bazarov" <v.Abaza...@comAcast.net> wrote:
jc wrote:
i'm having a very odd problem.
there is this application called app1
there are two dlls named dll1, dll2
dll1 is my custom library to process strings such as string copy,
string print all those stuffs
dll2 is a parser to parse xml files
app1 depends on dll1 and dll2
dll2 depends on dll1
when i run the application i call dll2 to parse a file. there are two
different paths that might lead to this situation. in both situations
i need to call dll2 to parse a file.
if i take path1, then everything is fine.
Which is *what*? What *is* "path1"?
there are two ways i can read the xml file. there is a basic
configuration file which specifies file name and some other variables
that i care about
the second way is to directly load the xml file by specifying the
name.
in both process i create a process that will init the parser
object(which resides in the dll) and then complete the parsing.
both path1 and path2 start the process called
LoadXMLFile
int CCCP::LoadxmlDatabase(void){
/*
then call parser to parse the xml file and load all the channel
values, if the parser returns with no error
return result of the load and parse.
zero is returned if no error in loading and parsing the xml file
*/
int retval;
jcStr *fname;
InitParser();//this will init the parser objects
char *temp;
fname = m_strxmlfname;
temp = fname->ReturnStr();
retval = Parser(temp, m_bxmlParseTalkative);
AnalyzeParseError(retval, fname, m_pWD);
DeleteParser();
InitTempLog();
m_pParent->PostMessage(CM_XML_FILE_LOADED);
return retval;
}
void CCCP::ParsexmlThread(LPVOID p){
/*
*/
//DWORD retVal = 0;
CCCP *w = (CCCP *)p;
w->LoadxmlDatabase();
//_endthread();
//return retVal;
}
int CCCP::StartLoadxmlThread(void){
/*
function StartLoadxmlThread
parameters: void
*/
m_pWD = DisplayParseWaitDialog();
m_bxmlLoadThreadActive = TRUE;
if(m_pxmlLoadThread){
m_pxmlLoadThread->join();
delete m_pxmlLoadThread;
m_pxmlLoadThread = NULL;
}
m_pxmlLoadThread = new
boost::thread(boost::bind(&CCCP::LoadxmLDatabase, this));
return 1;
}
if i go by path1, which means i get the file name from the config
file, i end up calling startloadxmlthread
if i go by path2, which means the user select the xml file from a
dialog box, then still i call startloadxmlthread function
but if i choose path2 m_strxmlfname will get corrupted
thanks
jc
if i take path2, then this filname pointer which is a pointer to this
object from dll1, gets corrupted.
OK, and what *is* "path2"? It's clear that it's different from "path1",
but in what way? We're not really mind readers here (not all of us,
anyway).
i gave up after a lots of debug time, but i cannot come up with any
specific answer. so here i come to the experts.
And you think we're going to guess? Or what?
also i noticed that when i run the app, dll1 has this message in the
module window "The module did not load at the default address".
It shouldn't matter. You can actually control the address at which
the module is loaded. See linker switches for "base address", or
look on MSDN for "How to: Specify a Base Address for a DLL".
is it possible that this might cause me problem because dll2 and app1
both depend on dll1 and since it didn't load at the default address
this is screwing me.
If that was a question, the answer "anything is possible, but this is
highly unlikely".
but how come it can work in one way but not the
other.
How about a bit more information? What your DLLs do, how, can you
distill your test to a couple of function calls or is that a long and
winding road to the malfunction? If you can distill it, why don't
you try and then post the code here?
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask