#define _Debug_
typedef unsigned int DLLUPLOADLENGTH(void);
typedef unsigned int DLLUPLOADDATA(unsigned char *dest);
void CUploadFileDlg::OnOK()
{
DLLUPLOADLENGTH *DllUploadLength;
DLLUPLOADDATA *DllUploadData;
unsigned char *uc;
HINSTANCE hins=NULL;
hins=LoadLibrary("MassStorage.dll");
if(hins)
{
DllUploadLength = (DLLUPLOADLENGTH*)GetProcAddress(hins, "UploadLength");
DllUploadData = (DLLUPLOADDATA*)GetProcAddress(hins, "UploadData");
if((DllUploadLength!=0) &&
(DllUploadData!=0))
{
unsigned int uiLength;
uiLength=DllUploadLength();
uc=(unsigned char*)malloc(uiLength);
if(uc==0)
{
FreeLibrary(hins);
return;
}
#ifdef _Debug_
CFileDialog FileDlg(false);
CString tsFileName;
if (FileDlg.DoModal () != IDOK)
{
FreeLibrary(hins);
return;
}
tsFileName = FileDlg.GetPathName ();
CFile OutFile;
OutFile.Open (tsFileName,
CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
if(DllUploadData(uc))
OutFile.Write(uc,uiLength);
OutFile.Close();
#else
DllUploadData(uc);
#endif
free(uc);
}
FreeLibrary(hins);
}
}当定义了_Debug_之后,这个程序只能调用一次,第二次再调用的时候hins就等于NULL,如果没有定义的时候重复一直调用都没有问题,是不是我在动态调用Dll时,再调用了CFileDialog,就会有问题呢?
//谢谢各位观众.
typedef unsigned int DLLUPLOADLENGTH(void);
typedef unsigned int DLLUPLOADDATA(unsigned char *dest);
void CUploadFileDlg::OnOK()
{
DLLUPLOADLENGTH *DllUploadLength;
DLLUPLOADDATA *DllUploadData;
unsigned char *uc;
HINSTANCE hins=NULL;
hins=LoadLibrary("MassStorage.dll");
if(hins)
{
DllUploadLength = (DLLUPLOADLENGTH*)GetProcAddress(hins, "UploadLength");
DllUploadData = (DLLUPLOADDATA*)GetProcAddress(hins, "UploadData");
if((DllUploadLength!=0) &&
(DllUploadData!=0))
{
unsigned int uiLength;
uiLength=DllUploadLength();
uc=(unsigned char*)malloc(uiLength);
if(uc==0)
{
FreeLibrary(hins);
return;
}
#ifdef _Debug_
CFileDialog FileDlg(false);
CString tsFileName;
if (FileDlg.DoModal () != IDOK)
{
FreeLibrary(hins);
return;
}
tsFileName = FileDlg.GetPathName ();
CFile OutFile;
OutFile.Open (tsFileName,
CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
if(DllUploadData(uc))
OutFile.Write(uc,uiLength);
OutFile.Close();
#else
DllUploadData(uc);
#endif
free(uc);
}
FreeLibrary(hins);
}
}当定义了_Debug_之后,这个程序只能调用一次,第二次再调用的时候hins就等于NULL,如果没有定义的时候重复一直调用都没有问题,是不是我在动态调用Dll时,再调用了CFileDialog,就会有问题呢?
//谢谢各位观众.
只是看出个内存泄漏的小问题。CFileDialog FileDlg(false);
CString tsFileName;
if (FileDlg.DoModal () != IDOK)
{
FreeLibrary(hins);
free(uc);
return;
}