国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

當前位置:雨林木風下載站 > 技術開發教程 > 詳細頁面

Delphi中如何調用VC++創建的動態鏈接庫

Delphi中如何調用VC++創建的動態鏈接庫

更新時間:2022-05-02 文章作者:未知 信息來源:網絡 閱讀次數:

Delphi以其獨特的面向控件的開發方式、強大的數據庫功能、快速的編譯技術以及簡單易學的編程特性,使得它自發布之日起即格外引人注目,許多程序員也因此將它作為首選的開發工具。然而,Delphi在科學計算、低端編程等方面的功能不如VC++。VC++功能強大、齊全,但是整個系統比較復雜、龐大,尤其對于初學者來說比較難學,其用戶界面的開發遠不如Delphi那樣方便、快捷。那么,我們能否將兩者的優點結合起來呢?答案是肯定的!具體做法是:將涉及到比較低級的操作、計算等方面的程序用VC++寫成函數放在動態鏈接庫中,而涉及到界面及與用戶交互的編程則用Delphi來實現,最后只需在Delphi中調用VC++編寫的動態鏈接庫即可。
一、動態鏈接庫簡介
動態鏈接庫(DLL,即 “Dynamic-Link Library”)是一個能夠被應用程序和其它的DLL調用的過程和函數的集合體,它里面包含的是公共代碼或資源。DLL是Windows的基石,所有的Win32 API函數都包含在DLL中。
使用DLL有許多優點:
1、一個DLL可以提供給不同的程序使用,如果有多個程序使用相同的DLL,也只需將DLL在內存中裝載一次,這樣就節省了內存開銷。
2、DLL可以使我們的編程更加模塊化,將功能相對獨立的模塊編成一個動態鏈接庫,這樣改動程序時不需將整個程序重新編譯,只需重新編譯所改動的模塊。
3、使用了DLL組件包可以大大減小可執行文件的規模。
4、對于一個大型的、不斷更新的應用程序,可以將許多重復的功能寫成DLL,用主程序調用,這樣既減少了開發的工作量,又提高了訪問速度。
5、DLL獨立于編程語言,大多數WINDOWS編程環境都允許主程序調用DLL中的函數。即可以用VC++、VB、PowerBuilder、Delphi、匯編語言等建立DLL,然后在不同語言編制的應用程序中調用它。這樣就給多人使用不同的編程語言開發項目提供了極大的方便。

二、在Delphi中調用VC++創建的動態鏈接庫的實例
(一)實驗環境
本實例的編程工具及運行環境為:Windows 98,VC++6.0,Delphi 5.0 。
(二)實驗內容
1.用VC++6.0建立一個動態鏈接庫MaxMin.DLL,該庫中包含有兩個函數:返回三個整數中最大整數的函數Max1( )和返回三個整數中最小整數的函數Min1( )。
2.用Delphi編寫測試程序調用動態鏈接庫MaxMin.DLL中的兩個函數。
(三)實驗步驟
1.用VC++6.0建立動態鏈接庫MaxMin.DLL
第一步:啟動VC++6.0,選擇“File/New/MFC AppWizzard(Dll)”,工程名設為“MaxMin”,按“確定”鈕后,選擇“Regular DLL Using shared MFC DLL”,按“Finish”鈕后,即創造了一個DLL的框架工程。
第二步:選擇“File/New”,在出現的對話框中選擇“C/C++ Header File”,在文件名處輸入“MyDLL”,按“確定”鈕,即創建了一個空的頭文件“MyDLL.h”。在該文件中輸入以下兩行內容:
extern "C" _declspec(dllexport) int Min1(int x,int y,int z);
extern "C" _declspec(dllexport) int Max1(int x,int y,int z);
選擇“File/Save”保存該文件的內容。
第三步:選擇“File/New”,在出現的對話框中選擇“C/C++ Source File”, 在文件名處輸入“MyDLL”,按“確定”鈕,即創建了一個空的源文件“MyDLL.cpp”。在該文件中輸入以下內容:
#include "stdafx.h"
#include "MyDll.h"
extern "C" __declspec(dllexport) int Min1(int x,int y,int z)
{
if ((x<=y) & (x<=z)) return x;
else if ((y<=x) & (y<=z)) return y;
else return z; /*找出x,y,z中的最小整數*/
}

extern "C" __declspec(dllexport) int Max1(int x,int y,int z)
{
if ((x>=y) & (x>=z)) return x;
else if ((y>=x) & (y>=z)) return y;
else return z; /*找出x,y,z中的最大整數*/
}
選擇“File/Save”保存該文件的內容。
第四步:按下運行圖標“!”,即生成了MyDLL.DLL(在當前工程目錄的DEBUG子目錄下)。

2.用Delphi編寫調用MaxMin.DLL的測試程序
調用動態鏈接庫有兩種方法,即隱式調用和顯式調用。
(1)隱式調用
第一步:啟動Delphi,選擇“New Application”,生成一個空的應用程序,在Form的“Name”屬性處輸入“TestVcDLLForm”,Caption屬性處輸入“VC++的DLL隱式調用測試”,在Form中放入控件如表1所示(其中所有的Edit控件的“Text”屬性均設為空):


(表1:所用到的控件及其屬性)



(圖1:應用程序屏幕效果)

最后設計的Form的屏幕效果如圖1所示。選擇“File/Save all”,在“Save unit1 as”對話框中將源文件名設為“main.pas”,按“保存”鈕;在“Save Project1 as”對話框中將工程名設為“TestVcDLL”,按“保存”鈕。
第二步:選擇“File/New…”,在出現的“New Item”對話框中選擇“unit”,按“OK”鈕,生成一個空的源文件,在該文件中輸入以下內容:
unit MaxMin;

interface
function Min1(x,y,z:Integer):Integer; stdcall;
function Max1(x,y,z:Integer):Integer; stdcall;

implementation
function Min1;external 'MaxMin.DLL' name 'Min1';
function Max1;external Max'Min.DLL' name 'Max1';
end.
選擇“File/Save As…”,將上述文件存為“MaxMin.pas”。
第三步:在Main.pas文件中,在“implementation”語句后加入:
uses
MaxMin;
第四步:在Form上雙擊“運行”按鈕對該按鈕的“Click”事件編程,代碼如下:
procedure TTestVcDLLForm.btnRunClick(Sender: TObject);
begin
edtMax.Text:=IntToStr(Max1(StrToInt(edtInt1.Text),
StrToInt(edtInt2.Text),StrToInt(edtInt3.Text))); //調用動態鏈接庫中的函數Max1
edtMin.Text:=IntToStr(Min1(StrToInt(edtInt1.Text),
StrToInt(edtInt2.Text),StrToInt(edtInt3.Text))); //調用動態鏈接庫中的函數Min1
end;
保存該文件。
第五步:將上述1.中VC++6所建立的動態鏈接庫“MaxMin.DLL”拷入Delphi的當前工作目錄中。
第六步:運行。結果如圖2所示。


圖2:隱式調用DLL運行結果



圖3:顯式調用DLL運行結果

(2)顯示調用
第一步:同隱式調用。只是將Form的“Caption”屬性改為“VC++的DLL顯式調用測試”。
第二步:選擇“File/New…”,在出現的“New Item”對話框中選擇“unit”,按“OK”鈕,生成一個空的源文件,在該文件中輸入以下內容:
unit Unit1;

interface

type
TMin1=function(x,y,z:Integer):Integer; stdcall;
TMax1=function(x,y,z:Integer):Integer; stdcall;
THandle=Integer;

implementation

end.
選擇“File/Save As…”,將上述文件存為“MaxMin.pas”。
第三步:在Main.pas文件中,在“implementation”語句后加入:
uses
MaxMin;
第四步:在Form上雙擊“運行”按鈕對該按鈕的“Click”事件編程,代碼如下:
procedure TTestVcDLLForm.btnRunClick(Sender: TObject);
var
Handle:THandle;
Min1:TMin1;
Max1:TMax1;
begin
Handle:=LoadLibrary('MaxMin.dll'); //將“MaxMin.dll”的文件映象映射進調用進程的地址空間
if Handle<>0 then
begin
@Min1:=GetProcAddress(Handle,'Min1'); //取得DLL中函數Min1( )的地址
@Max1:=GetProcAddress(Handle,'Max1'); //取得DLL中函數Max1( )的地址
if (@Min1<>nil) and (@Min1<>nil) then
begin
edtMin.Text:=IntToStr(Min1(StrToInt(edtInt1.Text),
StrToInt(edtInt2.Text),StrToInt(edtInt3.Text))); //調用動態鏈接庫中的函數Min1
edtMax.Text:=IntToStr(Max1(StrToInt(edtInt1.Text),
StrToInt(edtInt2.Text),StrToInt(edtInt3.Text))); //調用動態鏈接庫中的函數Max1
end else ShowMessage('調用函數“GetProcAddress”時出錯!');
FreeLibrary(Handle); //從進程的地址空間中解除“MaxMin.dll”文件的映射
end;
end;
保存該文件。
第五步:將上述1.中VC++6所建立的動態鏈接庫“MaxMin.DLL”拷入Delphi的當前工作目錄中。
第六步:運行。結果如圖3所示。

以上實例均編譯通過,運行正確。

三、結束語
動態鏈接庫為不同編程環境下的應用程序之間的連接提供了方便,節省了內存,提高了速度,同時也豐富了PowerScript語言的編程能力。動態鏈接庫是Windows下程序組織的一種重要方式,使用動態鏈接庫可以極大地保護用戶在不同開發工具、不同時期所做的工作;利用動態鏈接庫,用戶可以逐步去構筑自己的程序模塊庫,為今后的工作積累素材。

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統下載排行

国产午夜成人免费看片无遮挡_日本免费xxxx色视频_免费人成网上在线观看_黄网址在线永久免费观看

  • <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        9191国产精品| 欧美成人国产一区二区| 3d动漫精品啪啪一区二区竹菊| 亚洲日穴在线视频| 色婷婷国产精品综合在线观看| 一区二区三区在线视频观看| 亚洲精品一区在线观看| 日本欧美久久久久免费播放网| 欧美日韩国产综合草草| 秋霞午夜av一区二区三区| 欧美精品一区二区三区在线播放| 国产风韵犹存在线视精品| 成人免费在线观看入口| 91精彩视频在线| 免费看欧美女人艹b| 亚洲国产精品黑人久久久 | 欧美国产精品劲爆| 一本久久综合亚洲鲁鲁五月天| 午夜视频在线观看一区二区三区| 欧美一区二区福利在线| 另类的小说在线视频另类成人小视频在线| 欧美电影免费观看高清完整版在| 国产乱码精品一区二区三区av| 国产清纯白嫩初高生在线观看91| 色狠狠一区二区三区香蕉| 奇米影视7777精品一区二区| 久久无码av三级| 一本色道久久综合亚洲精品按摩| 精品一区二区三区在线视频| 亚洲精品一二三四区| 欧美一级xxx| av一区二区不卡| 久久精品国产一区二区| 亚洲卡通欧美制服中文| 久久亚区不卡日本| 7777女厕盗摄久久久| 国产精品一品视频| 日韩有码一区二区三区| 中文字幕佐山爱一区二区免费| 欧美伦理影视网| 91在线国产福利| 麻豆免费精品视频| 亚洲视频在线一区观看| 欧美成人一区二区三区在线观看| 一本色道久久综合亚洲91| 韩国女主播一区| 一区二区三区毛片| 国产欧美精品一区二区色综合 | 中文成人av在线| 欧美精品一级二级三级| 一本色道久久综合亚洲精品按摩| 麻豆精品视频在线观看| 婷婷综合五月天| 综合分类小说区另类春色亚洲小说欧美 | 一区二区三区日韩精品视频| 久久影院午夜论| 日韩一区二区三区在线| 日本韩国一区二区| 成人激情小说乱人伦| 国产在线一区观看| 日韩电影在线观看电影| 麻豆成人91精品二区三区| 亚洲一区影音先锋| 尤物视频一区二区| 亚洲人妖av一区二区| 国产欧美一区二区三区沐欲| 日韩欧美黄色影院| 精品区一区二区| 精品国产乱码91久久久久久网站| 777a∨成人精品桃花网| 日韩一区二区在线观看| 777色狠狠一区二区三区| 91麻豆精品国产综合久久久久久| 欧美三级视频在线| 在线观看成人小视频| 色天天综合色天天久久| 欧美日韩国产精品自在自线| 欧美一区二区三区在| 欧美精品乱码久久久久久| 欧美日韩高清影院| 精品三级av在线| 2020国产精品| 亚洲激情在线激情| 爽爽淫人综合网网站| 久久精品国产99国产| 国产一区二区三区日韩 | 日韩一级视频免费观看在线| 欧美吻胸吃奶大尺度电影 | 欧美一区二区精美| 国产无人区一区二区三区| 欧美韩国日本一区| 亚洲同性gay激情无套| 亚洲一二三区不卡| 国产在线播放一区三区四| 91香蕉视频污| 日韩免费高清电影| 国产亚洲一区二区在线观看| 亚洲国产sm捆绑调教视频 | 91精品国产免费| 久久影院午夜片一区| 国产精品成人免费精品自在线观看| 亚洲免费观看高清在线观看| 久久66热偷产精品| 欧美日韩精品一区视频| 国产精品国产三级国产专播品爱网| 亚洲成人手机在线| jlzzjlzz国产精品久久| 日韩西西人体444www| 亚洲综合在线五月| 国产suv一区二区三区88区| 欧美一级片免费看| 洋洋成人永久网站入口| 99re热这里只有精品免费视频| 777久久久精品| 国产日韩欧美高清在线| 蜜臀av性久久久久av蜜臀妖精 | 久久久青草青青国产亚洲免观| 亚洲欧美激情一区二区| 国产成人免费在线观看不卡| 欧美另类久久久品| 亚洲资源在线观看| 色婷婷综合久久| 综合精品久久久| 成人国产亚洲欧美成人综合网 | 欧美va亚洲va| 日韩国产欧美在线视频| 欧美人狂配大交3d怪物一区 | 99视频一区二区三区| 欧美精品视频www在线观看| 最新热久久免费视频| 99久久精品情趣| 亚洲丝袜精品丝袜在线| 一本大道久久a久久综合婷婷| 中文一区在线播放| av亚洲精华国产精华精华 | 国产农村妇女毛片精品久久麻豆| 美美哒免费高清在线观看视频一区二区| 色88888久久久久久影院野外| 亚洲女人的天堂| 欧洲亚洲精品在线| 亚洲高清不卡在线观看| 欧美美女激情18p| 欧美a级一区二区| 亚洲精品一区二区三区四区高清| 另类小说视频一区二区| 久久嫩草精品久久久精品| 高清在线成人网| 自拍偷拍国产亚洲| 欧美日韩综合在线免费观看| 性感美女久久精品| www久久久久| 91在线精品一区二区三区| 亚洲成人一二三| 久久先锋影音av鲁色资源网| 丁香婷婷综合色啪| 夜夜亚洲天天久久| 日韩一区二区不卡| 高潮精品一区videoshd| 亚洲精品日韩综合观看成人91| 欧美撒尿777hd撒尿| 久久99热国产| 亚洲欧美激情在线| 91精品欧美一区二区三区综合在| 国产资源精品在线观看| 国产精品麻豆欧美日韩ww| 欧美色视频一区| 国产精品亚洲人在线观看| 一区二区三区**美女毛片| 欧美一区二区三区在线看| 成人免费福利片| 视频一区视频二区中文| 国产精品久久久久9999吃药| 欧美久久久久久久久| av资源网一区| 久久99国产精品麻豆| 亚洲在线免费播放| 国产视频视频一区| 在线观看精品一区| 国产精品亚洲第一| 日韩精品一二三区| 1024亚洲合集| www国产亚洲精品久久麻豆| 欧美性三三影院| 成人国产精品免费观看视频| 日本大胆欧美人术艺术动态| 亚洲色欲色欲www在线观看| 久久综合久久综合亚洲| 在线成人高清不卡| 在线观看欧美精品| 91亚洲国产成人精品一区二区三| 国产在线一区二区| 日本aⅴ免费视频一区二区三区| 亚洲卡通动漫在线| 中文字幕一区二区三| 亚洲国产经典视频| 精品欧美一区二区三区精品久久| 欧美精品久久99| 欧美日韩高清一区二区三区| 色婷婷综合久久久久中文一区二区| jlzzjlzz亚洲女人18|