i checked the c++ part but the exception still occurs in msvcr100d.dll
here's a breakdown of the code...
globals i created in the dll cpp
template <class T>
class less_locale
{
public:
bool operator() (const T& s1, const T& s2)
{
return (wcsicoll(s1.c_str(), s2.c_str()) < 0);
}
};
CLexiconObject *lexObject;
CLexManagement *lexMng = new CLexManagement;
CLexDataBase *lexDB;
static const int PARAM_COUNT = 3;
CString paramName[PARAM_COUNT],param[PARAM_COUNT];
int paramType[PARAM_COUNT];
typedef multimap<wstring, int, less_locale<wstring> > MultimapKeyWord;
CString wordToSearch;
CString xo;
vector<int> wordAppearancesVector;
MultimapKeyWord keyWordTable;
vector<WordEntry> mWordEntryVector;
CLexSourceFileBase *lexSourceFile;
CLexIndexFileBase *lexIndexFile;
vector<CString> langstore;
CString retmessage = _T(" ");
char * retloaded = new char;
wchar_t* testing = new wchar_t;
the functions i made... the body of the function is taken from what i observed going on in the source stuff
char * loaddictionary(CString m_FileName,CString pathName, CString m_DictionaryName, CString language1, CString language2, int type, int* wlen)
{
lexObject = lexMng->CreateNewObject(type,language1);
lexObject->SetSourceFileName(m_FileName);
lexObject->SetSourceFilePath(pathName);
lexObject->SetName(m_DictionaryName);
for(int i=0; i < PARAM_COUNT; i++)
lexObject->GetIndexFile()->SetParam(i, param[i]);
BOOL OK = lexObject->GetSourceFile()->Open(pathName);
if (OK)
{
lexObject->GetSourceFile()->Analyse();
int result = lexObject->GetIndexFile()->LoadNew(lexObject->GetSourceFile());
if (result == CLexIndexFileBase::LOADING_PENDING)
{
CString str;
lexObject->GetIndexFile()->GetProgressMessage(str);
CString keyw=_T("Reading keywords...");
CString writin=_T("Writing index file...");
char *toshow = (char *)(LPCTSTR)(str);
for(int i=0;i<str.GetLength();i++)
cout<<*(toshow+(i*2));
cout<<endl;
while(str==keyw)
{
int progress = lexObject->GetIndexFile()->GetProgress();
cout<<progress<<"...";
cout<<'\xd';
lexObject->GetIndexFile()->GetProgressMessage(str);
}
cout<<"done"<<endl;
lexObject->GetIndexFile()->GetProgressMessage(str);
toshow = (char *)(LPCTSTR)(str);
for(int i=0;i<str.GetLength();i++)
cout<<*(toshow+(i*2));
cout<<endl;
for(int i=0;i<1000;i++)
{
int progress = lexObject->GetIndexFile()->GetProgress();
cout<<progress<<"...";
cout<<'\xd';
lexObject->GetIndexFile()->GetProgressMessage(str);
}
lexObject->GetIndexFile()->IsLoadingOver(result);
if(result)
{
cout<<"done"<<endl;
str=_T("Loaded");
}
else
{
cout<<"not done"<<endl;
str=_T("Not Loaded");
}
memcpy(retloaded,str,(str.GetLength())*2);
*wlen=str.GetLength();
}
else if (result != CLexIndexFileBase::LOADING_SUCCESSFUL)
{
lexMng->Delete(lexObject);
lexObject = NULL;
xo=_T("Loading Unsuccessful");
*wlen=xo.GetLength();
memcpy(retloaded,xo,(xo.GetLength())*2);
}
else
{
xo=_T("Loading Successful");
memcpy(retloaded,xo,(xo.GetLength())*2);
*wlen=xo.GetLength();
}
storelangind(language1,language2);
}
else
{
lexMng->Delete(lexObject);
lexObject = NULL;
xo=_T("No such File");
memcpy(retloaded,xo,(xo.GetLength())*2);
*wlen=xo.GetLength();
}
return retloaded;
}
wchar_t* findword(CString aWordToSearch,int* wlen)
{
lexIndexFile = lexObject->GetIndexFile();
lexSourceFile = lexObject->GetSourceFile();
wordToSearch=aWordToSearch;
BOOL completeWord = 1;
BOOL exactMatch = 1;
mWordEntryVector.clear();
keyWordTable.clear();
wordAppearancesVector.clear();
int count = 0;
if (wordToSearch.GetLength() > 0)
{
count = lexIndexFile->FindWords(wordToSearch,
&wordAppearancesVector,
completeWord,
exactMatch);
if(count>0)
{
int i = 0;
CLang *lang = lexSourceFile->GetLang();
CString tempLocale;
lang->GetLocale(tempLocale);
_wsetlocale(LC_ALL, tempLocale);
vector<int>::iterator it;
for(it = wordAppearancesVector.begin(); it < wordAppearancesVector.end(); it++)
{
int entryLine = *it;
CString entryWord = lexSourceFile->GetHeadWord(*it, wordToSearch);
if (entryWord!= _T(""))
{
wstring wstr(entryWord.GetBuffer());
keyWordTable.insert(pair<wstring, int>(wstr, entryLine));
}
}
_wsetlocale(LC_ALL, L"C");
vector<WordEntry>::iterator its;
MultimapKeyWord::iterator mm_it = keyWordTable.begin();
lexSourceFile->GetWordEntryAt(mm_it->second,
mWordEntryVector);
its = mWordEntryVector.begin();
CString orig = (*its).meaning;
retmessage = orig;
*wlen=orig.GetLength();
}
else
{
xo=_T("no meaning found");
memcpy(retmessage,xo,(xo.GetLength())*2);
retmessage = xo;
*wlen=xo.GetLength();
}
}
else
{
xo=_T("no word entered");
retmessage = xo;
*wlen=xo.GetLength();
}
memcpy(testing,retmessage.GetBuffer(),retmessage.GetLength());
wchar_t * we = retmessage.GetBuffer();
for(int i=0;i<*wlen;i++)
{
*(testing+i) = *(we+i);
}
return testing;
}