运行Delphi新建一个工程并保存然后把DatFormatOBJ拷贝到它的目录之下在单元的implementation下面添加如下代码:
{$LINK DatFormatobj} //链接外部OBJ文件
function _CheckIsDatFile(const FileName:Pchar;IsDatFile:PBool):Bool;cdecl;external;//定义函数其中cdecl进栈方式说明采用C语言格式传递参数external说明是个外部声明函数
注意函数声明的原形与C定义的不一样必须在前面添加一个下划线原因是因为编译器的链接符号中C与C++是不一样的因为这个不是本文重点所以这里不作讨论请感兴趣的朋友自行参阅相关资料
然后我们写如下代码调用此函数:
以下是引用片段
procedure TFrmMain
Button
Click(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
[] [] [] [] []