mfcdll靜態編譯
A. vs2013如何靜態編譯
項目屬性-配置屬性-常規-MFC的使用-使用標准Windows庫(不用MFC)
然後,C/C++-代碼生成-運行庫-多線程/MT或者多線程調試/MTd
帶d的是鏈接調試版本,DEBUG項目選/MTd,Release項目選/MT
如果使用MFC,在MFC的使用中設置靜態、動態鏈接,代碼生成中必須使用<從上級繼承>
B. vc++ 2008的dll動態靜態編譯問題
這個情況有以下幾種可能:
你編譯的是Debug版本,因此別的計算機(未安裝VS2008)上無法運行。請使用Releaset版本
如果是MFC應用程序,請在項目的屬性中(Release)的常規中,把【MFC的使用】改為「在靜態庫中使用MFC」。
如果你的程序調用了其它的第三方庫,這些庫在編譯時用了靜態鏈編,而別的計算機上無此庫的dll文件。因此請將相應Dll附帶打包進去。
運行時庫的問題,修改項目屬性中,C++,代碼生成中的基本運行時庫檢查。
C. 如何將MFC程序靜態編譯
{
for (int i = 0; i < n; i++)
printf("%d%s", a[i], i == n - 1 ? "\n" : " ");
}
D. 已經將mfc動態鏈接庫以靜態編譯的方式編譯,為什麼程序還會提示缺少dll
如果丟失,按我說的試試
第一、修復
使用騰訊電腦管家,點開電腦診所之後,搜缺失的dll文件,會自動篩選出來,然後你只需要點立即修復即可!
第二、下載安裝
根據你的系統下載(比如XP或w7),然後點開你的系統盤,點開windows這個文件夾再點開system32這個文件夾,把下載下來的dll文件復制進來就可
E. MFC編程如何把dll封裝入exe中
可以把dll以二進制形式寫入到exe文件後面(exe允許後邊添加任意長度數據 不影響程序的運行)長度為dll大小 在程序初始化的中讀取自身文件後偏移dll大小的數據 然後創建這個dll 再loadlibrary 程序退出前deletefile把dll刪除 如果不想被發現的話 還可以把dll的屬性設置為隱藏或者直接將dll寫入到windows目錄下
F. 創建mfc項目時,vs提示選擇在共享dll中使用mfc與在靜態庫中使用mfc有什麼區別
共享dll方式,你的程序用到的MFC中的執行代碼(指目標代碼,二進制指令)不會被編譯進exe中,當exe執行時會載入mfc中的dll。靜態庫中使用,編譯時會將用到的mfc dll中的代碼編譯進exe中,exe運行時不在需要mfc的dll
G. vs2010為什麼設置了靜態編譯還是需要dll文件才能運行exe
靜態編譯:就是在編譯可執行文件的時候,將可執行文件需要調用的對應動態鏈接庫(.so)中的部分提取出來,鏈接到可執行文件中去,使可執行文件在運行的時候不依賴動態鏈接庫。
編譯方式:
第1種:
設置:
1、項目->配置屬性->常規->MFC的使用:在靜態庫中使用MFC
2、項目 -> 配置屬性->C/C++->代碼生成->運行庫 :選擇 多線程調試(/MTd)。
編譯時,選擇的是debug,win32
然後執行編譯生成方案,在該工程目錄下的debug文件中,找到該.exe文件,即可在其他電腦運行。
第2種:
一般可以配置一下兩項:
1.項目 -> 配置屬性->常規->MFC的使用 :在靜態庫中使用MFC。
2.項目 -> 配置屬性->C/C++->代碼生成->運行庫 :選擇 多線程調試(/MT)。
編譯時,選擇的是release,win32(這個選擇項在工具欄的debug選框中,一般我們使用debug方式)
H. VC++6.0如何設置才能靜態編譯
你在初建的時候有個靜態調用dll還是動態調用dll,如果沒選,默認好像是動態調用,如果你想改為靜態調用就需要自己配製。修改一般可以配置一下兩項:
1.項目 -> 配置屬性->常規->MFC的使用 :在靜態庫中使用MFC。
2.項目 -> 配置屬性->C/C++->代碼生成->運行庫 :選擇/MT。
I. 怎麼讓MFC程序不使用靜態編譯
不使用靜態編譯,發布時就需要把MFC相關的庫帶上
J. 靜態鏈接編譯通過,使用MFC共享dll編譯不過
#ifdef _AFXDLL
#define DECLARE_MESSAGE_MAP() \
private: \
static const AFX_MSGMAP_ENTRY _messageEntries[]; \
protected: \
static AFX_DATA const AFX_MSGMAP messageMap; \
static const AFX_MSGMAP* PASCAL _GetBaseMessageMap(); \
virtual const AFX_MSGMAP* GetMessageMap() const; \
#else
#define DECLARE_MESSAGE_MAP() \
private: \
static const AFX_MSGMAP_ENTRY _messageEntries[]; \
protected: \
static AFX_DATA const AFX_MSGMAP messageMap; \
virtual const AFX_MSGMAP* GetMessageMap() const; \
#endif
#ifdef _AFXDLL
#define BEGIN_MESSAGE_MAP(theClass, baseClass) \
const AFX_MSGMAP* PASCAL theClass::_GetBaseMessageMap() \
{ return &baseClass::messageMap; } \
const AFX_MSGMAP* theClass::GetMessageMap() const \
{ return &theClass::messageMap; } \
AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass::messageMap = \
{ &theClass::_GetBaseMessageMap, &theClass::_messageEntries[0] }; \
AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \
{ \
#else
#define BEGIN_MESSAGE_MAP(theClass, baseClass) \
const AFX_MSGMAP* theClass::GetMessageMap() const \
{ return &theClass::messageMap; } \
AFX_COMDAT AFX_DATADEF const AFX_MSGMAP theClass::messageMap = \
{ &baseClass::messageMap, &theClass::_messageEntries[0] }; \
AFX_COMDAT const AFX_MSGMAP_ENTRY theClass::_messageEntries[] = \
{ \
#endif
#define END_MESSAGE_MAP() \
{0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 } \
}; \