A. 易語言怎麼靜態編譯出dll文件
遠程我給你操作,
具體方式
點開易語言
然後
新建windows動態鏈接庫
然後寫代碼
編譯後就是DLL.文件
謝謝參考!
B. SOUI的utilities模塊為什麼要用DLL編譯
SOUI相對於DuiEngine一個重要的變化就是很多模塊變成了一個單獨的DLL。
然後很多情況下用戶可能希望整個產品就是一個EXE,原來DuiEngine提供了LIB編譯模式,此時鏈接LIB模式的DuiEngine就行了。
但是SOUI默認至少Utilities那個模塊是不提供LIB編譯模式的。
utilities之所以默認只提供DLL編譯是因為SString類是由utilities實現的。
字元串是編譯中碰到的最最見的基本對象之一。在運行庫(CRT)動態編譯(MD,MDd)時這不是問題,因為所有模塊的內存分配都是在一個相同的運行庫(CRT)上,這時在不同模塊之間傳遞對象相對簡單。如果項目採用運行庫靜態編譯(MT or MTd),在不同模塊之間傳遞字元串對象是非常困難的,因為一不小心就會發生在A模塊中分配的字元串對象被B模塊釋放。
utilities採用DLL編譯就是為了解決這個字元串對象的跨模塊傳遞。
採用運行庫動態編譯的情況就不說了,這里主要介紹採用靜態庫編譯的CRT的情況。
SOUI中使用的字元串對象採用了一點技巧:每一個String對象中只有一個指針成員變數:
template <class tchar, class tchar_traits>
class TStringT
{
public:
typedef tchar _tchar;
typedef const _tchar * pctstr;
protected:
tchar* m_pszData; // pointer to ref counted string data
};
雖然TStringT是一個模板類,在SOUI中採用類導出的方式將該模板的兩個特化類導出:
#ifdef UTILITIES_EXPORTS
# define EXPIMP_TEMPLATE
#else
# define EXPIMP_TEMPLATE extern
#endif
#pragma warning (disable : 4231)
EXPIMP_TEMPLATE template class UTILITIES_API TStringT<char, char_traits>;
EXPIMP_TEMPLATE template class UTILITIES_API TStringT<wchar_t, wchar_traits>;
復制代碼
通過將string類導出,保證string的所有運行代碼都是在utilities這個模塊內部,這也就保證了string對象的唯一成員變數:
tchar* m_pszData;
的內存分配及釋放固定在utilities這個模塊里。
通過這樣處理,無論用戶定義string是在哪一個模塊,真正的內存管理還是在utilities里,從而使得string對象可以方便的在不同模塊之間傳遞。
比較一下std::string就可以發現,如果使用std::string在不同模塊之間傳遞對象將是非常危險的,因為std::string是模板類,它的代碼將會被編譯到不同的模塊中,也就是說在不同的模塊中調用std::string的成員函數執行的代碼是不一樣的,這樣在A模塊中聲明的string傳遞到B模塊再被B模塊釋放程序就崩潰了。
C. 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方式)
D. 易語言 靜態編譯出來的.exe 為什麼還要和皮膚dll放一塊才能運行.
任何編譯器都不可能把調用的Dll編譯到程序里,否則將會加大程序體積且Dll也會失去它的發明目的。有的Dll文件不需要打包,比如windos目錄下的User32.dll確保每個系統都有的就不用打包,你使用的Dll文件應自行打包到運行目錄下
E. 易語言靜態編譯為什麼是exe
DLL是動態鏈接庫、EXE是可執行文件;另外,E還可以編譯模塊.ec之類的,這就要看你需要了。目前E靜態後都是EXE,不能DLL或者其他格式,除非E官方放出靜態可以其他格式,再說DLL編譯後就是單獨的DLL了 其他編程軟體也能調用
F. windows中LIB和DLL的區別與使用
關於lib和dll的區別如下:
(1)lib是編譯時用到的,dll是運行時用到的。如果要完成源代碼的編譯,只需要lib;如果要使動態鏈接的程序運行起來,只需要dll。
(2)如果有dll文件,那麼lib一般是一些索引信息,記錄了dll中函數的入口和位置,dll中是函數的具體內容;如果只有lib文件,那麼這個lib文件是靜態編譯出來的,索引和實現都在其中。使用靜態編譯的lib文件,在運行程序時不需要再掛動態庫,缺點是導致應用程序比較大,而且失去了動態庫的靈活性,發布新版本時要發布新的應用程序才行。
(3)動態鏈接的情況下,有兩個文件:一個是LIB文件,一個是DLL文件。LIB包含被DLL導出的函數名稱和位置,DLL包含實際的函數和數據,應用程序使用LIB文件鏈接到DLL文件。在應用程序的可執行文件中,存放的不是被調用的函數代碼,而是DLL中相應函數代碼的地址,從而節省了內存資源。DLL和LIB文件必須隨應用程序一起發行,否則應用程序會產生錯誤。如果不想用lib文件或者沒有lib文件,可以用WIN32 API函數LoadLibrary、GetProcAddress裝載。
G. 易語言靜態編譯出dll文件後該怎麼打開
DLL是動態鏈接庫。。是不能打開的。注入器倒是沒有。以前的現在應該也不能用了
一般要用到
——————————我倒是有幾個以前的注入器源碼。..
輸入法.安裝 ()
輸入法.設置注入
H. 為什麼我下載的易語言源碼編譯出來後是DLL文件
載的易語言源碼,源碼都是.e的後綴
但是你的這個源碼,人家做的時候就是弄的.DLL動態鏈接庫,所以編譯後就是DLL。
這個應該是G吧??需要注入的
I. 為什麼易語言靜態編譯後還是提示找不到dll
系統提示丟失dll文件解決辦法:
1、下載缺少的dll文件,復制到c:\windows\system32文件夾下;
2、按win+r,輸入regsvr32 /s 該文件文件名XX.DLL,點擊確定;
3、彈出提示信息框,提示注冊成功,點擊確定即可。
4、用騰訊電腦管家電腦診所--搜 缺失dll文件--立即修理