版權聲明:本文爲博主原創文章,未經博主允許不得轉載。
聲明
此文的讀者定爲C語言初學者。此文介紹的技巧適用於開發迷你型項目或自娛自樂的玩具程序,正規的項目中可能不會採用。讀者可以抱着茶餘飯後休閒娛樂的心態來圍觀,至於CLI、GUI等名詞解釋請參看百度百科。轉載請保留此聲明和原作者redraiment,謝謝!
正文
誘人的GUI程序
程序的作用就是化繁爲簡,讓計算機高效地幫我們完成枯燥的工作。寫程序最大的動力就是你精心設計的程序能獲得大家的認可、大衆的好評,這其中伴隨着發佈程序給大家使用。
在C語言編寫的操作系統(比如UNIX、Windows等)上,C語言可以說是“無所不能”。但很多初學者發現,即便自己把C語言教材從頭啃到尾,依然只能寫出命令行下的程序。程序是CLI還是GUI本無可厚非,對我們程序員來說更重要的是程序本身提供的功能嘛,而且CLI相對於GUI還更靈活一些。也許你可以嘗試一下把程序發送給一個非計算機科班出身的朋友,估計得大費脣舌來解釋程序如何運行,可能最後還落得一個“不方便”的抱怨。撇開這些不說,至少一個活潑的桌面圖標也比死氣沉沉的終端圖標更吸引人。
但編寫GUI程序從來不是一件容易的事情,MFC也好、Swing也罷,都是一堆煩人的接口。用VB可以屏蔽這些細節,界面設計是所見即所得的,拖拖拽拽就能堆出一個像樣的界面。本文的原理就是用VB來設計前臺界面,C做後臺邏輯處理。實現方法就是將C程序打包成DLL文件,由VB程序來調用。
所需軟件
Dev-C++ 4.9.9.2或以上版本,VB 6.0精簡版。這兩款軟件在華軍軟件園都能下載到,合起來大小也就15MB左右。如果你有完整版的VB當然更好,不過有精簡版的也夠用了。
Dev-C++生成DLL的方法
- 打開Dev-C++;
- 點擊“文件”-“新建”-“工程”,工程類型選擇“DLL”;
- 語言必須選擇“C”,不能選擇“C++”;
- 爲工程取一個名字,比如“hello”。確定後會自動生成“dllmain.c”和“dll.h”兩個文件;
- “dllmain.c”裏自帶了一個函數“DLLIMPORT void HelloWord ()”,但爲了能在VB裏調用,需要在DLLIMPORT後面添加一個“__stdcall”,即“DLLIMPORT __stdcall void HelloWord ()”,“dll.h”文件中也做同樣的修改。沒有寫“__stdcall”的話會彈出“DLL調用約定錯誤,錯誤號:49”,所以請務必小心。
- 保存文件後,按Ctrl+F9編譯。就會在工程的目錄下生成一個hello.dll。
用VB設計程序界面
- 打開VB;
- 新建一個“標準EXE”工程;
- 拖一個按鈕控件(工具箱的第三行第二列)到界面上,如下圖。
在VB中調用DLL裏的函數
在VB中調用DLL裏的函數,首先要聲明纔可調用。聲明的格式是
[Public|Private] Declare [Sub|Function] 函數名 Lib "DLL路徑,可以是相對路徑,也可以是絕對路徑" (ByVal或ByRef等參數列表) [as 返回值類型]
- 雙擊VB的窗口界面,打開代碼窗口;
- 將一下代碼複製到代碼窗口裏
Private Declare Sub HelloWorld Lib "hello.dll" () Private Sub Command1_Click() HelloWorld End Sub
- 點擊“文件”-“生成工程1.exe”,路徑選擇剛纔Dev-C++生成hello.dll所在的目錄。
- 確保“工程1.exe”和“hello.dll”兩個文件放在同一個目錄下,雙擊運行“工程1.exe”。
- 點擊按鈕“Command1”,就會彈出一個窗口,顯示“Hello World from DLL!”則表示調用DLL成功!如下圖
現在,你可以自由發揮來編寫豐富多彩的GUI程序了!
附錄A:C參數在VB中的聲明
C語言的字符串要特殊處理
char *: ByVal args As String
C類型 | VB類型 |
---|---|
short | Integer |
int | Long |
long | Long |
UINT | Long |
ULONG | Long |
WORD,DWORD | Long |
WPARAM,LPARAM | Long |
WMSG,UMSG | Long |
HRESULT | Long |
BOOL | Boolean |
COLORREF | Long |
HWND,HDC,HBRUSH,HKEY,等等. | Long |
LPSTR,LPCSTR | String |
LPWSTR,OLECHAR,BSTR | String |
LPTSTR | String |
VARIANT_BOOL | Boolean |
unsignedchar | Byte |
BYTE | Byte |
VARIANT | Variant |
版權聲明
本人的所有原創文章皆保留版權,請尊重原創作品。
轉載必須包含本聲明,保持本文完整,並以超鏈接形式註明原始作者“redraiment”和主站點上的本文原始地址。
聯繫方式
我的郵箱,歡迎來信([email protected])
我的Blogger(子清行)
我的Google Sites(子清行)
我的CSDN博客(夢婷軒)
我的百度空間(夢婷軒)