#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,就会有问题呢?
//谢谢各位观众.

解决方案 »

  1.   

    眼拙,没看出来,但是加载动态库和使用MFC的类没有关系。
    只是看出个内存泄漏的小问题。CFileDialog FileDlg(false);
    CString tsFileName;
    if (FileDlg.DoModal () != IDOK)
    {
       FreeLibrary(hins);
       free(uc);
       return;
      

  2.   

    呵呵,确实是有内存泄漏,不过加了之后还是一样,因为debug的时候,流程没有到这一步,不管如何,谢谢你!