Delphi调用C++编写的DLL
第一步:用C++编写的调用系统时间的源码:Time.h源码:
extern "C" _declspec(dllexport) void main();
Time.cpp源码:
//调用系统时间
#include <stdio.h>
#include <string.h>
#include <time.h>
#include "Time.h"
extern "C" _declspec(dllexport) void main()
{
struct tm *newtime;
char am_pm[] = "AM";
time_t long_time;
time( &long_time ); /* Get time as long integer. */
newtime = localtime( &long_time );
/* Convert to local time. */
if( newtime->tm_hour > 12 ) /* Set up extension. */
strcpy( am_pm, "PM" );
if( newtime->tm_hour > 12 ) /* Convert from 24-hour */
newtime->tm_hour -= 12; /* to 12-hour clock. */
if( newtime->tm_hour == 0 ) /*Set hour to 12 if midnight. */
newtime->tm_hour = 12;
printf( "%.19s %s\n", asctime( newtime ), am_pm );
}
然后编译生成了获取系统时间的Time.dll动态库文件。
第二步:在Delphi中调用这个Time.dll文件。
在Form1中,我放置了一个Button1和一个Edit1,当单击按钮时,触发事件,调用Time.dll,将系统时间显示是Edit1中,如何实现???
其中按钮事件代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
Handle:THandle;
main:Tmain;
begin
Handle:=LoadLibrary('Time.dll'); //将“Time.dll”的文件映象映射进调用进程的地址空间
if Handle<>0 then
begin
@main:=GetProcAddress(Handle,'main'); //取得DLL中函数main( )的地址
if (@main<>nil) then
begin
//edtMin.Text:=IntToStr(main(StrToInt(edtInt1.Text),
Edit1.Text:=IntToStr(main());
end
else
ShowMessage('调用函数“GetProcAddress”时出错!');
FreeLibrary(Handle); //从进程的地址空间中解除“Time.dll”文件的映射
end
end;
end.
能通过编译,但结果并没有显示出系统时间。是怎么回事?还望有人能够指点一二,谢谢。