exe編譯成dll
1. 如何編譯生成dll
使用VC下的cl和link手工創建dll並實現函數導入
1、創建dll頭文件:
/*
* dllmain.h
*/
#ifndef _DLLMAIN_H
#define _DLLMAIN_H
int getNumber();
#endif
2、創建dll源文件:
/*
* dllmain.c
*/
#include "dllmain.h"
int getNumber()
{
return 10;
}
3、 創建def文件:
; export.def
LIBRARY MY_DLLMAIN ; MY_DLLMAIN 將成為生成的dll的名稱
EXPORTS
getNumber @1 ; 這個名稱即為函數的實際導出名稱 @1為函數的導出編號
4、生成dll文件:
cl dllmain.c /c
link /def:export.def /dll dllmain.obj
這時,工程中已經包含了 dllmain.h dllmain.c export.def dllmain.obj dllmain.lib dllmain.exp MY_DLLMAIN.dll 其中,後4個文件是編譯鏈接過程中生成的文件
5、創建dlltest.c:
/*
* dlltest.c
*/
#include <stdio.h>
#include "dllmain.h" //dll庫的頭文件
#pragma comment(lib,"dllmain.lib") //dllmain.lib即是上一步生成的文件
int main()
{
printf("%dn",getNumber());
}
6、編譯、鏈接dlltest.c
cl dlltest.c /c
link dlltest.obj
注意:這里dllmain.lib和dllmain.h應該和dlltest.c在同一個目錄中。此步的結果將生成 dlltest.exe
7、運行:
dlltest
這時,系統將載入my_dllmain.dll這個動態鏈接庫,將調用其中的getNubmer函數。
2. 如何將MFC生成的exe轉換為DLL
新建一個DLL工程,比如MyDLL,將原工程中的*.h 和 *.cpp文件復制到新建的工程目錄下,並添加到工程中。同樣的方式導入res文件,不用再去建一遍對話框。我的做法是,新建的工程和原工程同名,然後僅在MyDLL.h中添加相應的頭文件,最關鍵的一步是添加dll函數介面:
在MyDLL.h中添加
extern "C" __declspec(dllexport) void ShowDentalViewDlg(void);// "C"很必要,多個教程中強調,不加的話,由於C++編譯器為函數添加類型名,可能導致在其他程序中調用無法找到對應的函數
然後在MyDLL.cpp中實現它:
extern "C" __declspec(dllexport) void ShowDentalViewDlg(void)
{
CDentalViewDlg dlg;
dlg.DoModal();
}
3. 如何將COM組件(*.dll)或exe,通過命令行重新編譯為新的dll文件
採用
extern "C" int APIENTRY
DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
方式建立你COM組件類,重新編譯即可。
4. 在VB中如何將exe工程文件轉換成dll工程文件
不是個轉換的DLL文件指的是動態連接庫,你在新建程序的時候就可以建立一個動態連接庫工程,在這個裡面一般是放一些資源或則函數之內的東西,供程序調用,也就是說如果你的程序要更新的時候只需要更新相應的DLL文件就可以了,這樣很方便,但是開發DLL最好還是用VC++,這個簡單多了
5. DELPHI EXE怎麼轉成DLL,謝謝!
你打開你的工程文件,直接把那個「program」關鍵字改為"Library"然後編譯即可
如果你要調用哪個過程函數,就要寫導出表了
附一個簡單的Dll工程:
Library Test;
uses
Windows;
function TestFunc(p:pointer):Pointer;stdcall;//需要調用的功能函數
begin
Result:=p;
end;
//導出表
Exports
TestFunc;
begin
end.
6. 有沒有將exe文件編譯成dll文件的工具
不用工具.
打開"我的電腦",在窗口的工具欄上面"工具"-->"文件夾選項"-->"查看"-->
找到"隱藏已知文件類型的擴展名",把前面的"囗"設置為空白,也就是不選,-->確定.
然後,就在你想要改的那個EXE文件重名名,後面加上」.DLL」就行啦.
但此法只是冶標不冶本.
7. exe文件怎麼改成dll文件
兩個結構是完全不一樣的,需要拿到源代碼,然後做改動重新編譯才行的。
8. 如何filetool.exe 來生成dll文件
VC++6不能添加文件(vc與visio沖突)問題解決辦法1、到微軟官方下載 filetool.exe( http://support.microsoft.com/kb/241396/en-us);2、運行 filetool.exe 釋放出一個c++工程文件;3、編譯該工程生成 FileTool.dll;4、VisualC++, 中單擊 「工具」 菜單中 「定製」 ;5、在 「定製」 對話框中, 單擊 「附加項和宏文件」 選項卡。6、單擊 瀏覽 按鈕並定位步驟 2 中生成 FileTool.dll 文件。7、單擊 確定 以保存設置。8、這時會出現一個新的工具條,有兩個按鈕用於添加文件,原來的添加文件功能依舊不能用。9、如果想刪除原來的菜單和快捷鍵,請參看 http://support.microsoft.com/kb/241396/en-us
9. 如何把VS的exe工程轉成dll工程
解決辦法:
1、下載缺少的dll文件,復制到c:\windows\system32文件夾下;
2、按win+r,輸入regsvr32 /s 該文件文件名XX.DLL,點擊確定;
3、彈出提示信息框,提示注冊成功,點擊確定即可。
4、用騰訊電腦管家電腦診所--搜 缺失dll文件--立即修理
10. c#使用命令行編譯生成dll文件
C#使用csc.exe編譯程序,csc使用/target:library(縮寫: /t:library)參數生成Dll文件。
其它參數如下:
Visual C# 編譯器選項
- 輸出文件 -
/out:<文件> 指定輸出文件名(默認值: 包含主類的文件或第一個文件的基名稱)
/target:exe 生成控制台可執行文件(默認) (縮寫: /t:exe)
/target:winexe 生成 Windows 可執行文件 (縮寫: /t:winexe)
/target:library 生成庫 (縮寫: /t:library)
/target:mole 生成能添加到其他程序集的模塊 (縮寫: /t:mole)
/target:appcontainerexe 生成 Appcontainer 可執行文件 (縮寫: /t:appcontainerexe)
/target:winmdobj 生成 WinMDExp 使用的 Windows 運行時中間文件 (縮寫: /t:winmdobj)
/doc:<文件> 要生成的 XML 文檔文件
/platform:<字元串> 限制可以在其上運行此代碼的平台: x86、Itanium、x64、arm、anycpu32bitpreferred 或 anycpu。默認值為 anycpu。
- 輸入文件 -
/recurse:<通配符> 根據通配符規范,包括當前目錄和子目錄下的所有文件
/reference:<別名>=<文件> 使用給定的別名從指定的程序集文件引用元數據 (縮寫: /r)
/reference:<文件列表> 從指定的程序集文件引用元數據 (縮寫: /r)
/addmole:<文件列表> 將指定的模塊鏈接到此程序集中
/link:<文件列表> 嵌入指定的互操作程序集文件中的元數據 (縮寫: /l)
- 資源 -
/win32res:<文件> 指定 Win32 資源文件(.res)
/win32icon:<文件> 對輸出使用此圖標
/win32manifest:<文件> 指定 Win32 清單文件(.xml)
/nowin32manifest 不包括默認 Win32 清單
/resource:<資源信息> 嵌入指定的資源 (縮寫: /res)
/linkresource:<資源信息> 將指定的資源鏈接到此程序集 (縮寫: /linkres)
其中 resinfo 的格式是 <file>[,<string name>[,public|private]]
- 代碼生成 -
/debug[+|-] 發出調試信息
/debug:{full|pdbonly} 指定調試類型(「full」是默認類型,可以將調試程序附加到正在運行的程序)
/optimize[+|-] 啟用優化 (縮寫: /o)
- 錯誤和警告 -
/warnaserror[+|-] 將所有警告報告為錯誤
/warnaserror[+|-]:<警告列表> 將特定警告報告為錯誤
/warn:<n> 設置警告等級(0-4) (縮寫: /w)
/nowarn:<警告列表> 禁用特定的警告消息
- 語言 -
/checked[+|-] 生成溢出檢查
/unsafe[+|-] 允許「不安全」代碼
/define:<符號列表> 定義條件編譯符號 (縮寫: /d)
/langversion:<字元串> 指定語言版本模式: ISO-1、ISO-2、3、4、5 或 Default
- 安全性 -
/delaysign[+|-] 僅使用強名稱密鑰的公共部分對程序集進行延遲簽名
/keyfile:<文件> 指定強名稱密鑰文件
/keycontainer:<字元串> 指定強名稱密鑰容器
/highentropyva[+|-] 啟用高平均信息量的 ASLR
- 雜項 -
@<文件> 有關更多選項,請閱讀響應文件
/help 顯示此用法信息 (縮寫: /?)
/nologo 取消編譯器版權信息
/noconfig 不要自動包含 CSC.RSP 文件
- 高級 -
/baseaddress:<地址> 要生成的庫的基址
/bugreport:<文件> 創建「Bug 報告」文件
/codepage:<n> 指定打開源文件時要使用的代碼頁
/utf8output 以 UTF-8 編碼格式輸出編譯器消息
/main:<類型> 指定包含入口點的類型(忽略所有其他可能的入口點) (縮寫: /m)
/fullpaths 編譯器生成完全限定路徑
/filealign:<n> 指定用於輸出文件節的對齊方式
/pdb:<文件> 指定調試信息文件名(默認值: 擴展名為 .pdb 的輸出文件名)
/errorendlocation 輸出每個錯誤的結束位置的行和列
/preferreilang 指定首選輸出語言名稱。
/nostdlib[+|-] 不引用標准庫(mscorlib.dll)
/subsystemversion:<字元串> 指定此程序集的子系統版本
/lib:<文件列表> 指定要在其中搜索引用的附加目錄
/errorreport:<字元串> 指定如何處理內部編譯器錯誤: prompt、send、queue 或 none。默認值為 queue。
/appconfig:<文件> 指定一個包含程序集綁定設置的應用程序配置文件
/moleassemblyname:<字元串> 此模塊所屬程序集的名稱