下面的代码有什么问题吗,请高手看看

河西郎 2017-04-30 02:05:36
下面的代码,在调试的过程中没有问题,在执行过程中总是出问题,未能找到原因,请高手指点
//---------------------------------------------------------------------------
String getOutFileName( String FileType )
{
String myFileName = "" ;
String InitialDir = ExtractFilePath( ParamStr(0) ) + FileType ;

if ( !DirectoryExists( InitialDir ) )
CreateDir( InitialDir ) ;

TSaveDialog *mySaveDlg = NULL ;
mySaveDlg = new TSaveDialog( NULL ) ;
mySaveDlg->Title = "请输入导出后的" + FileType + "文件名称..." ;

if( FileType.CompareIC( "Excel" ) == 0 )
{
mySaveDlg->Filter = "Excel 工作簿(*.xlsx)|*.xls|Excel 97-2003 工作簿(*.xls)|*.xls" ;
mySaveDlg->DefaultExt = "*.xlsx" ;
}
else if( FileType.CompareIC( "Word" ) == 0 )
{
mySaveDlg->Filter = "Word 文档(*.docx)|*.doc|Word 97-2003 文档(*.doc)|*.doc" ;
mySaveDlg->DefaultExt = "*.docx" ;
}
mySaveDlg->Options = mySaveDlg->Options<<ofOverwritePrompt ;
mySaveDlg->InitialDir = InitialDir ;

if( mySaveDlg->Execute() == true )
myFileName = mySaveDlg->FileName ;
else
myFileName = "" ;

delete mySaveDlg ;
mySaveDlg = NULL ;

return myFileName ;
}


代码首次执行到 if( mySaveDlg->Execute() == true ) 时,弹出如下图所示窗体


图1

紧接着弹出下图提出窗口


图2

不退出该程序,再次执行到该段上述代码时,弹出如下图所示窗体


图3

此后,只要不退出软件,只要执行上述代码,总是出现 图3 所示的问题

如果退出程序,首次执行上述代码,则会出现图1和图2所示问题,紧接着不退出程序,只要执行上述代码,就出现图3提示问题。

上述问题是在 C++Builder 2010 环境下出现的,同样代码,在 C++Builder 6.0环境下没有问题。

请高手不吝指点。
...全文
177 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
河西郎 2017-05-03
  • 打赏
  • 举报
回复
通过以下方法解决了目前的问题(上述代码存在的问题始终未能找到) 1、将上述代码封装成一个动态链接库文件 extern "C" __declspec(dllexport) String __stdcall getFileName( String FileType ) ; #pragma argsused int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved) { return 1; } //--------------------------------------------------------------------------- String __stdcall getFileName( String FileType ) { String myFileName = "" ; String InitialDir = ExtractFilePath( ParamStr(0) ) + FileType ; if ( !DirectoryExists( InitialDir ) ) CreateDir( InitialDir ) ; TSaveDialog *mySaveDlg = NULL ; mySaveDlg = new TSaveDialog( NULL ) ; mySaveDlg->Title = "请输入导出后的 " + FileType + " 文件名称..." ; if( FileType.CompareIC( "Excel" ) == 0 ) { mySaveDlg->Filter = "Excel 工作簿(*.xlsx)|*.xlsx|Excel 97-2003 工作簿(*.xls)|*.xls" ; mySaveDlg->DefaultExt = "*.xlsx" ; } else if( FileType.CompareIC( "Word" ) == 0 ) { mySaveDlg->Filter = "Word 文档(*.docx)|*.docx|Word 97-2003 文档(*.doc)|*.doc" ; mySaveDlg->DefaultExt = "*.docx" ; } mySaveDlg->Options = mySaveDlg->Options<<ofOverwritePrompt ; mySaveDlg->InitialDir = InitialDir ; if( mySaveDlg->Execute() ) myFileName = mySaveDlg->FileName ; else myFileName = "" ; delete mySaveDlg ; mySaveDlg = NULL ; return myFileName ; } 2、在主程序中调用 //--------------------------------------------------------------------------- String getFileName( String FileType ) { AnsiString FileName =""; HINSTANCE DllHandle = NULL ; String (__stdcall *getmyFileName)( String FileType ); (FARPROC) getmyFileName = NULL ; String myFileName = "" ; FileName = ExtractFilePath( ParamStr(0) ) ; FileName = FileName + "Resources\\CreateExcel.dll"; DllHandle = LoadLibrary( FileName.c_str() ); if( DllHandle == NULL ) { FreeLibrary( DllHandle ) ; return myFileName ; } getmyFileName = (String (__stdcall*)(String FileType)) GetProcAddress( DllHandle , "getFileName"); if( getmyFileName == NULL ) { FreeLibrary( DllHandle ) ; return myFileName ; } try { myFileName = getmyFileName( FileType ); } catch(...) { } if( DllHandle ) FreeLibrary( DllHandle ) ; return myFileName ; } 未出现任何问题,实现了预定功能。 但未经封装为动态链接库文件的几乎一样的代码为何在主程序调用总是有问题,原因不得而知,很怪异 ......
ooolinux 2017-04-30
  • 打赏
  • 举报
回复
引用 2 楼 mywindpursue 的回复:
修改后,还是没有用 @u010165006 谢谢 是不是我用的 C++Builder 2010 没有打补丁或者有什么bug ?
这个不确定,bug应该是小bug,不会这种的。
河西郎 2017-04-30
  • 打赏
  • 举报
回复
修改后,还是没有用 @u010165006 谢谢 是不是我用的 C++Builder 2010 没有打补丁或者有什么bug ?
ooolinux 2017-04-30
  • 打赏
  • 举报
回复
==true 去掉看看

604

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder VCL组件使用和开发
社区管理员
  • VCL组件使用和开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧