㈠ vs自带打包程序打包mfc+access,分不是问题,只要能弄好!
access数据库不需要装office,只要有数据库引擎mdac就可以,XP应该自带了,如果保险可以在安装程序中一起打包一个。
㈡ MFC开发软件sql2005数据库怎么打包(主要是能够在没有sql的机子上使用)
SQLServer相对你程序,是独立系统,是一个服务,没有装SQLserver ,没法子用
㈢ 如何将MFC资源文件打包成dll
将MFC资源文件打包成dll
项目中经常会遇到主程序的资源文件是在一个dll中,就是把资源文件部分任务提取出来,比如添加各种语言的字符串,各种图标,各种版本的Dlg或者Menu等等。改好之后,只需要build下就可以生成包含各种资源文件的dll,主程序只需要去调用这个dll即可。
在软件工程中,很多项目都要这样做,因为资源和逻辑分离,这样就可以做到低耦合。
下面开始介绍如何将MFC多文档程序的资源文件打包成dll:
创建MFC程序,工程名为Main,然后一直点下一步,就创建好了一个多文档应用程序。
删除该工程的Resource.h和Main.rc,注意:这里是Remove不是Delete,VC6.0删除只是从工程中删除,文件还在;VS2005以上版本会提示Remove还是Delete。
在当前工程中添加一个MFC扩展Dll项目,工程名为Main_Res;
删除Resource Files下所有文件(Remove即可),删除Resource.h(Delete);然后Copy主程序Main的Res到Main_Res的Res中;右键Header Files,Add Existing Item,选择Main中的Resource.h,右键Resource Files,Add Existing Item,选择Main中的Main.rc。
编译Main_Res项目,生成Main_Res.dll;
在Main项目中,Main.h中include的Resource.h可以修改成../Main_Res/Resource.h也可以不修改,因为原来的Resource.h没有彻底删除,编译的时候还是可以找到的,在头文件中添加变量HINSTANCE m_hResourceDll;;Main.cpp的InitInstance()最前面添加如下代码:
[cpp] view plain
Class View中,右键CMainAPP属性,添加ExitInstance,代码如下:
[cpp] view plain
int CMainApp::ExitInstance()
{
// TODO: Add your specialized code here and/or call the base class
if (m_hResourceDll)
{
AfxFreeLibrary(m_hResourceDll);
}
return CWinApp::ExitInstance();
}
m_hResourceDll = AfxLoadLibrary(_T("Main_Res.dll"));
if (m_hResourceDll)
{
AfxSetResourceHandle(m_hResourceDll);
}
else
{
MessageBox(NULL, _T("Load Main_Res.dll failed!"), _T("Error"), 0);
return FALSE;
}
编译运行Main项目即可。
注意:
这里调用资源dll的方式为动态(显式)调用,静态(隐式)调用会load资源失败。貌似将主程序的资源文件提取到dll中的话,只能采用动态(显式)调用。
静态调用的时候,运行会Crash
[cpp] view plain
// create main MDI Frame window
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))
{
delete pMainFrame;
return FALSE;
}
因为LoadFrame(IDR_MAINFRAME)会失败,然后delete pMainFrame;的时候就会内存访问非法!肯定是因为IDR_MAINFRAME资源没有找到。具体原因找到后我会更新说明下。
如果不在dll项目中删除Resource Files下所有文件(Remove即可),会编译报错如下:
1>CVTRES : fatal error CVT1100: plicate resource. type:VERSION, name:1, language:0x0804
1>LINK : fatal error LNK1123: failure ring conversion to COFF: file invalid or corrupt
㈣ 在mfc下怎样才能把程序以及文件打包成exe文件
有专门的打包工具 innosetup/setup facory/installshield
都可以
innosetup可能比较简单上手
㈤ MFC捆绑数据库
利用setup factory 制作成一个安装文件,将MFC程序与你程序需要的数据文件一起打包,这样在安装的时候,就释放到一个文件夹中,这样的话,就不会出现你说的问题。
不知道有没有解决你的问题。
㈥ 如何对vc6.0环境下开发的MFC程序进行软件打包
ODBC数据源可以在程序初始化时自动配置数据源。可用仿照以下代码完成注册数据源:BOOL C***App::InitInstance(){}里面添加代码如下:
/////////////////////////自动注册数据源驱动/////////////////////////
CString szPath;
GetMoleFileName(NULL,szPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
szPath.ReleaseBuffer ();
int nPos;
nPos=szPath.ReverseFind ('\\');
szPath=szPath.Left (nPos);
CString szFile = szPath + "\\???.mdb";
char szAtr[256];
sprintf(szAtr,"DSN=%s!DBQ=%s!DEFAULTDIR=%s!! ","???",
szFile,szPath);
int nlen;
nlen = strlen(szAtr);
for (int i=0; i<nlen; i++)
{
if (szAtr [i] == '!')
szAtr [i] = '\0';
}
if (FALSE == SQLConfigDataSource(NULL, ODBC_ADD_DSN, "Microsoft Access Driver (*.mdb)\0", (LPCSTR)szAtr))
AfxMessageBox("自动注册数据源失败");
其中以上是ACCSESS,SQLServer类似,只是SQLConfigDataSource函数的参数不同,可搜索相关信息。
㈦ 怎么把mfc做好的程序打包成一个安装包,可以在别的电脑安装运行
在菜单里选
”文件“
-->“新建”-->"项目"
会弹出
“新建项目”
对话框
在对话框的“项目类型”列表里选“其他项目类型”--->"安装和部署"
对话框的“模板列表里”选“安装项目”
或“安装向导”就会生成一个安装项目
在里面添加生成的“.exe"
等就可以了。
然后编译就可以生成安装包了。
"打包成一个非安装的软件",这个想法不适合带有数据库连接的程序。
使用数据库的程序,必须配置合理的连接参数、安装ADO等连接组件、还需要有数据库。而这些,应该通过安装程序解决。
简单安装程序,可以使用快速打包软件实现,VS2010有一个自带的发布程序(就在菜单里),可以实现自动打包,如果需要进行数据库配置,那么需要通过专用的语言进行编程。
㈧ vs2010的mfc 程序已经做好 怎么把他封装成动态库
vs2010的mfc 程序已经做好需要将MFC中的类封装为一个Dll并导出。
将MFC中的类封装为一个Dll并导出 封装Dll类 打开VC6.0,file->new->Projects->MFCAppWizard [dll],输入Project name 为pipeDll。
下一步,选择MFCExtension DLL(using sharedMFCDLL),features选择.MFC应用程序打包。
从库的创建到调用过程。MFC封装功能成动态库相关问题汇总记录
基本的创建过程可以从很多地方查询得到,这里主要记录在VS2017 Debug X86开发过程中发生的各种异常问题解决。
无法定义 dllimport 实体 Password。
使用AFX_EXT_CLASS定义声明类。
注意在项目属性->C/C+±>预处理器中,预处理器定义_AFXEXT;删除_USRDLL。
调用动态库显示动态库窗体得到句柄为空且无法显示窗体。
_USRDLL:静态方式链接MFC库,这样子的话本身MFC的库中带有_DllMain函数的定义。
_AFXDLL:动态方式链接到MFC库,这样子的话,调用侧dll需要自己定义_DllMain入口函数。
可知需要定义_DllMain入口函数,在此我创建dllmain.cpp文件来定义_DllMain入口函数。