㈠ 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入口函數。