熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

C語言代碼套用在Delphi編程中[4]

2013-11-11 21:05:08  來源: Delphi編程 


  運行Delphi新建一個工程並保存然後把DatFormatOBJ拷貝到它的目錄之下在單元的implementation下面添加如下代碼:

  {$LINK DatFormatobj} //鏈接外部OBJ文件

  function _CheckIsDatFile(const FileName:Pchar;IsDatFile:PBool):Bool;cdecl;external;//定義函數其中cdecl進棧方式說明采用C語言格式傳遞參數external說明是個外部聲明函數

  注意函數聲明的原形與C定義的不一樣必須在前面添加一個下劃線原因是因為編譯器的鏈接符號中C與C++是不一樣的因為這個不是本文重點所以這裡不作討論請感興趣的朋友自行參閱相關資料

  然後我們寫如下代碼調用此函數:

  以下是引用片段 

procedure TFrmMainButtonClick(Sender: TObject);
  var
  IsDatFile:Bool;
  begin
  if OpenDialogExecute then
  if _CheckIsDatFile(Pchar(OpenDialogFileName)@IsDatFile) then
  if IsDatFile then ShowMessage(恭喜!該文件是一個Dat格式的視頻文件!)
  else ShowMessage(不好意思該文件不是一個Dat格式的視頻文件!)
  else ShowMessage(讀文件錯誤!);
  end;

  編譯這個程序將得到一個干淨的可執行EXE文件了

  四:C++Builder中使用Delphi單元

  這個實際是題外話了不過這裡還是提一提:假設我們有一個獲取BIOS密碼的Delphi單元

  unit AwardBiosPas;

  {=======================================================

  項目: 在Delphi編程中使用C語言代碼 演示程序

  模塊: 獲取BIOS密碼單元

  以下是引用片段 

interface
  uses
  windows SysUtils;
  function My_GetBiosPassword: string;
  implementation
  function CalcPossiblePassword(PasswordValue: WORD): string;
  var
  I: BYTE;
  C: CHAR;
  S: string[];
  begin
  I := ;
  while PasswordValue <> do
  begin
  Inc(I);
  if $ > PasswordValue then
  begin
  if $ > PasswordValue then
  S[I] := CHAR(PasswordValue)
  else if $B > PasswordValue then
  S[I] := CHAR(PasswordValue and $)
  else if $D > PasswordValue then
  S[I] := CHAR($ or (PasswordValue and $F))
  else if $ > PasswordValue then
  begin
  S[I] := CHAR($ or (PasswordValue and $F));
  if > S[I] then
  S[I] := CHAR(BYTE(S[I]) + );
  end
  else if $C > PasswordValue then
  S[I] := CHAR($ or (PasswordValue and $))
  else if $E > PasswordValue then
  S[I] := CHAR($ or (PasswordValue and $))
  else
  begin
  S[I] := CHAR($ or (PasswordValue and $F));
  if z < S[I] then
  S[I] := CHAR(BYTE(S[I]) );
  end;
  end

[]  []  []  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/8457.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.