c語言dll文件
C程序編譯成dll文件只不過是在要公開的介面函數聲明前面加上幾個特定的修飾符而已。
下面是個例子,用dev-cpp建了個dll的默認文檔
/*dll.h文件*/
#ifndef _DLL_H_
#define _DLL_H_
#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */
DLLIMPORT void HelloWorld (void);
#endif /* _DLL_H_ */
/*dllmain.c文件*/
/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
DLLIMPORT void HelloWorld ()
{
MessageBox (0, "Hello World from DLL!/n", "Hi", MB_ICONINFORMATION);
}
BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */ )
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
break;
case DLL_PROCESS_DETACH:
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
/* Returns TRUE on success, FALSE on failure */
return TRUE;
}
具體請參考jilei08124的CSDN博客
『貳』 dll文件如何用C語言生成
用 vc 6.0 下的cl.exe 和 link.exe工具,請讀下文:
聲明:下面這篇文章不是我寫的,源自:一個叫,有容乃大 的博客
如何手工編寫動態鏈接庫(windows dll)
1.本例介紹在命令行(Console)環境下製作dll的方法
2.讀者動手前,請確保在windows中安裝有編譯、鏈接工具和必要的函數庫文件。
3.本例使用C語言實現.
4.本例中使用路徑均為我機器上的絕對路徑,讀者需根據實際情況調整。
工具要求:
Microsoft的編譯器cl.exe
MIcrosoft鏈接器link.exe
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.1 新建命令行窗口
3.2 設置PATH �0�7 INCLUDE �0�7 LIB 3個環境變數.
SET PATH=K:\vcnet\vc7\bin;%PATH%
SET INCLUDE=K:\vcnet\vc7\include;%INCLUDE%
SET LIB=K:\vsnet\Vc7\lib;%LIB%
3.3 編譯hello.c
cd K:\Source\dllsample (hello.c和hello.def所在目錄)
cl /c hello.c
3.4 鏈接hello.obj,生成hello.dll,hello.lib兩個文件.
link /def:hello.def /dll hello.obj
4.測試dll函數.
4.1 編寫測試代碼 test.c
extern int say_hello(char* name);
int main(int argc,char** argv)
{
say_hello( "robbie ");
return 0;
}
4.2 編譯測試代碼test.c
cl /c test.c
4.3 鏈接test.obj和 hello.lib,生成可執行文件test.exe
link test.obj hello.lib
4.4 運行test.exe,屏幕輸出:
hello robbie
至此,一個dll構造完畢.
下面是我自己的一點補充:
如果要在c++下,或者win32 mfc下使用標准c寫的dll,必須把上面的聲明
extern int say_hello(char* name);改成:extern "C " int say_hello(char* name);
『叄』 C語言如何調用DLL
//dll
#include<windows.h>
extern"C"//保持C語言文件
void_declspec(dllexport)tryProc()//定義函數
{
MessageBox(NULL,_T("a"),_T("a"),MB_OK);
}
-------------------------------------
//C
#include<windows.h>
intmain()
{
HMOUDLEdll=LoadLibrary(/*DLL文件名*/);
if(dll!=NULL)
{
FARPROCtry=GetProcAddress(dll,"tryProc");
if(try!=NULL)
{
tryProc();//假如函數有返回值,可以用try()得到返回值
/*_asmcalltryProc*/
}
}
return0;
}
『肆』 用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函數和導出
函數的代碼。
『伍』 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文件
1、新建DLLTest文件夾,在該文件夾中新建source文件夾。
注意事項:
C語言能以簡易的方式編譯、處理低級存儲器。C語言是僅產生少量的機器語言以及不需要任何運行環境支持便能運行的高效率程序設計語言。
『捌』 如何用VC編寫dll文件
VC編寫dll文件
1、VC++->New->Project->Win32 Dynamic_Link Library;
2、選擇創建一個空工程;
首先DLL需要一個頭文件,所以新建一個CC++ Header File
這個頭文件中必須包含想要輸出的變數和函數,頭文件必須定義用於輸出的任何符號和數據結構。
例如 :
證明調用動態鏈接庫里的 Add函數成功。
『玖』 c語言怎麼調用dll文件
由於c的sdk編程的時候調用的api也應該是從dll中導出來的,這樣c應該也是能調用dll的,c語言調用dll文件內部函數的方法如下:
1:用c調用一個載入器LOADER<可能是個api函數>;
2:載入目標dll,比如xx.dll
3:找到需要調用的函數的地址P_FUNC
4:調用FUNC即可
『拾』 關於c語言 dll文件和lib文件的問題
靜態鏈接 lib文件的二進制代碼最終要鏈接植入你的exe中
動態鏈接 dll文件內的二進制代碼不會植入你的exe中
靜態編譯 如果lib文件 的源碼修改了 編譯生成新的lib文件 那麼
新的lib文件要和你的源碼編譯得到的obj文件重新鏈接生成 新的exe
之前的exe就可以扔進回收站了
動態編譯 dll 的源碼修改了 重新編譯生成新的dll (dll的調用介面 保持不變)
你的源文件編譯 obj文件後鏈接生成exe exe是動態鏈接調用dll 的所以 你的源碼不需要重編譯 你的exe依然可以用,你要做的只是 過來替換一下 n個dll中發生變動的那k個 ,