① dll文件如何用c語言生成
在編譯的時候,選擇DLL選項就可以生成了.當然你的程序,要符合DLL的規范,比如要引出至少一個函數什麼的.把main換成dllmain
② 怎麼把C語言程序打包成DLL文件
dll製作步驟: 1.編寫dll函數實現源代碼hello.c #include int say_hello(char* name) { printf( "hello %s\n ", name); return 1; } 2.編寫dll函數輸出定義文件hello.def. LIBRARY hello EXPORTS say_hello @1 3.編譯dll源碼,生成dll,lib文件. 3....
③ c怎麼生成dll文件
在VC++中選擇新建一個Win32 Dynamic-Link Library。需要建立一個c/c++ head file和一個c/c++ source file並加入工程。頭文件中內容為輸出函數的聲明,源文件中內容為DllMain函數和輸出函數的定義。下面是一個最簡單的例子。
//dlldemo.h
#ifdef __cplusplus
#define EXPORT extern "C" __declspec(dllexport)
#else
#define EXPORT __declspec(dllexport)
#endif
EXPORT void CALLBACK DllFoo(void) ;
//dlldemo.c
#include <windows.h>
#include "dlldemo.h"
int WINAPI DllMain (HINSTANCE hInstance, DWORD fdwReason, PVOID pvReserved)
{
return TRUE ;
}
EXPORT void CALLBACK DllFoo(void)
{
MessageBox(NULL,TEXT("This function is exported from a DLL"),TEXT("DllFoo"),MB_OK) ;
return ;
}
頭文件預處理中的__declspec是微軟增加的「C擴展類存儲屬性」(C Extended Storage-Class Attributes),它指明一個給出的實例被存儲為一種微軟特定的類存儲屬性,可以為thread,naked,dllimport或dllexport. [MSDN原文:The extended attribute syntax for specifying storage-class information uses the __declspec keyword, which specifies that an instance of a given type is to be stored with a Microsoft-specific storage-class attribute (thread, naked, dllimport, or dllexport).] 輸出函數必須指明為CALLBACK。 DllMain是dll的入口點函數。也可以不寫它。DllMain必須返回TRUE,否則系統將終止程序並彈出一個「啟動程序時出錯」對話框。 編譯鏈接後,得到動態鏈接庫文件dlldemo.dll和輸入庫文件dlldemo.lib。
④ c語言寫的程序怎麼樣生成.dll文件
這個過程和C語言怎麼寫沒什麼大關聯,主要是編譯器的編譯設置,IDE對內置的編譯核心進行了相應的設置,才將代碼轉換成DLL而不是EXE,這個問題我糾結了好久,最終還是妥協了IDE,在IDE里選擇建立DLL工程,IDE在編譯這個工程的時候就會自動進行相應的設置(准確的說是應用了DLL相關的命令)這樣,編譯出來的就是DLL了.
⑤ 用C語言編寫DLL
一.動態鏈接庫(dll)結構
——dll中定義有兩種函數:導出函數(export
function)和內部函數
(internal
function),導出函數可以被其他模塊調用,內部函數只能在dll內部使用。我們在用c++定製dll文件時,需要編寫的就是包含導出函數表的模塊定義文件(.def)和實現導出函數功能的c++文件。下面以sample.dll為例介紹def文件和實現文件的結構:
——1.模塊定義文件(.def)是由一個或者多個用於描述dll屬性的模塊語
句組成的文本文件,每個.def文件至少必須包含以下模塊定義語句:
第一個語句必須是library語句,指出dll的名字。
exports語句列出被導出函數的名字。
可以使用description語句描述dll的用途(此句可選)。
";"對一行進行注釋(可選)
——2.實現文件(.cpp文件為例)
——實現入口表函數的.cpp文件中,包含dll入口點處理的api函數和導出
函數的代碼。
⑥ 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:<字元串> 此模塊所屬程序集的名稱
⑦ 怎樣把C#文件編譯成DLL文件
動態鏈接庫 (DLL) 在運行時鏈接到程序。為說明如何生成和使用 DLL,請看以下方案:
MathLibrary.DLL:為庫文件,其中包含運行時要調用的方法。此例中,DLL 包含兩個方法:Add 和 Multiply。
Add.cs:為源文件,其中包含 Add(long i, long j) 方法。該方法返回參數之和。包含 Add 方法的 AddClass 類是命名空間 UtilityMethods 的成員。
Mult.cs:為源文件,其中包含 Multiply(long x, long y) 方法。該方法返回參數之積。包含 Multiply 方法的 MultiplyClass 類也是命名空間 UtilityMethods 的成員。
TestCode.cs:包含 Main 方法的文件。它使用 DLL 文件中的方法來計算運行時參數的和與積。
示例
// File: Add.cs
namespace UtilityMethods
{
public class AddClass
{
public static long Add(long i, long j)
{
return (i + j);
}
}
}
// File: Mult.cs
namespace UtilityMethods
{
public class MultiplyClass
{
public static long Multiply(long x, long y)
{
return (x * y);
}
}
}
// File: TestCode.cs
using UtilityMethods;
class TestCode
{
static void Main(string[] args)
{
System.Console.WriteLine("Calling methods from MathLibrary.DLL:");
if (args.Length != 2)
{
System.Console.WriteLine("Usage: TestCode <num1> <num2>");
return;
}
long num1 = long.Parse(args[0]);
long num2 = long.Parse(args[1]);
long sum = AddClass.Add(num1, num2);
long proct = MultiplyClass.Multiply(num1, num2);
System.Console.WriteLine("{0} + {1} = {2}", num1, num2, sum);
System.Console.WriteLine("{0} * {1} = {2}", num1, num2, proct);
}
}
/* Output (assuming 1234 and 5678 are entered as command line args):
Calling methods from MathLibrary.DLL:
1234 + 5678 = 6912
1234 * 5678 = 7006652
*/
此文件包含使用 DLL 方法 Add 和 Multiply 的演算法。它首先分析從命令行輸入的參數 num1 和 num2。然後使用 AddClass 類中的 Add 方法計算和,使用 MultiplyClass 類中的 Multiply 方法計算積。
請注意,文件開頭的 using 指令使您得以在編譯時使用未限定的類名來引用 DLL 方法,如下所示:
MultiplyClass.Multiply(num1, num2);
否則,必須使用完全限定名,如下所示:
UtilityMethods.MultiplyClass.Multiply(num1, num2);
執行
若要運行程序,請輸入 EXE 文件的名稱,文件名的後面跟兩個數字,如下所示:
TestCode 1234 5678
編譯代碼
若要生成文件 MathLibrary.DLL,請使用以下命令行編譯文件 Add.cs 和文件 Mult.cs:
csc /target:library /out:MathLibrary.DLL Add.cs Mult.cs
/target:library 編譯器選項通知編譯器輸出 DLL 文件而不是 EXE 文件。後跟文件名的 /out 編譯器選項用於指定 DLL 文件名。否則,編譯器使用第一個文件 (Add.cs) 作為 DLL 文件名。
若要生成可執行文件 TestCode.exe,請使用以下命令行:
csc /out:TestCode.exe /reference:MathLibrary.DLL TestCode.cs
/out 編譯器選項通知編譯器輸出 EXE 文件並且指定輸出文件名 (TestCode.exe)。此編譯器選項是可選的。/引用編譯器選項指定該程序使用的 DLL 文件。
⑧ c語言怎麼調用dll文件
1、新建DLLTest文件夾,在該文件夾中新建source文件夾。
注意事項:
C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。
⑨ C語言,怎麼生成dll文件
到cmd下用vc的編譯器cl.exe編譯fixupdemo.c
⑩ 如何用VC編寫dll文件
VC編寫dll文件
1、VC++->New->Project->Win32 Dynamic_Link Library;
2、選擇創建一個空工程;
首先DLL需要一個頭文件,所以新建一個CC++ Header File
這個頭文件中必須包含想要輸出的變數和函數,頭文件必須定義用於輸出的任何符號和數據結構。
例如 :
證明調用動態鏈接庫里的 Add函數成功。