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

在Delphi編程中使用C語言代碼[2]

2013-11-23 17:36:18  來源: Delphi編程 
 三:在Delphi中直接鏈接C語言的OBJ文件

  這種方法的好處在於最終EXE不用帶任何外部文件也不用對C語言過於熟悉

  我們都知道代碼在編譯成可執行文件(或DLLOCX文件下同)之前都必須得先生成OBJ文件(DELPHI一般是DCU文件但也可以通過編輯編譯選項生成OBJ文件)然後把OBJ文件和資源文件(*RES)鏈接成最終的可執行文件利用這個方法我們可以直接把OBJ文件鏈接到我們的程序裡面

  不過需要注意的是編譯器不同生成的OBJ文件也不一樣Microsoft的編譯器生成的OBJ文件是COFF格式而Borland的C++Builder生成的是OMF格式因為我們需要在Delphi中鏈接所以必須使用CBC或者Borland官方站點帶的免費編譯工具下面我們通過一個簡單的例子來說明具體操作步驟:

  這個例子是簡單的提供一個函數用來判斷一個文件是否為Dat格式的VCD文件頭文件聲明如下:

以下是引用片段
  /*
  文件名稱:DatFormath
  */
  #ifndef DatFormat_H
  #define DatFormat_H
  #include 
  #pragma pack(push )//這個與下面的配對一般用到記錄類型的時候需要定義這裡實際不用
  #ifdef __cplusplus
  extern C {
  #endif
  extern BOOL CheckIsDatFile(const char * FileNameBOOL *IsDatFile);
  #ifdef __cplusplus
  }
  #endif
  #pragma pack(pop)
  #endif // DatFormat_H
  具體實現代碼DatFormatc如下:
  #include DatFormath
  BOOL CheckIsDatFile(const char * FileNameBOOL *IsDatFile)
  /*
  函數說明:該函數用於判斷一個文件是否為Dat文件(即VCD文件)格式
  參數:
  IN:
  FileName:欲判斷的文件名稱
  INOUT:
  IsDatFile:是否為Dat格式文件
  OUT:
  讀文件失敗返回FALSE否則返回TRUE
  
  作者:陳經韬 http://wwwsoftcomlovejingtao@cncom
  */
  {
  HANDLE hFile;
  DWORD dwBytesRead;
  BOOL re;
  char MyBuf[];
  *IsDatFile=FALSE;
  //建立讀文件句柄
  hFile = CreateFile(FileName
  GENERIC_READ
  FILE_SHARE_READ
  NULL
  OPEN_EXISTING
  
  );
  if (hFile == INVALID_HANDLE_VALUE) return FALSE;
  //讀文件
  re = ReadFile(hFile
  &MyBuf
  
  &dwBytesRead
  NULL);
  if (dwBytesRead!=)
  {
  CloseHandle(hFile);
  return FALSE;
  }
  //讀文件失敗的時候
  if (re!=TRUE)
  {
  CloseHandle(hFile);
  return FALSE;
  }
  CloseHandle(hFile);
  *IsDatFile=(MyBuf[]==R && MyBuf[]==I && MyBuf[]==F && MyBuf[]==F);
  return(TRUE);
  }

[]  []  []  []  


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