科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件在Delphi和VC中创建和调用动态链接库

在Delphi和VC中创建和调用动态链接库

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

大家在软件开发时经常会遇到这样的情况,在不同的开发环境中为实现一些功能相同的过程。

作者:丛蓉 李恺 来源:yesky 2007年11月1日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
三、用VC创建DLL

  在VC中创建DLL,与Delphi中的创建过程相似,步骤如下:

  (1)新建一个DLL项目。MFC提供两种类型的动态链接库:常规型DLL、扩展型DLL。其中,常规型DLL适合于非MFC开发环境下采用支持DLL调用的程序设计语言开发的应用程序,扩展型DLL只能被MFC程序使用。

  (2)创建该DLL中的过程或函数,只需在程序中加入下列语句:

extern "C" _declspec(dllexport)
int yanzheng(CString input,char* zcm)
{
 AFX_MANAGE_STATE(AfxGetStaticModuleState());
 file://具体实现过程
}

  该函数的功能是验证注册码是否合法,其中yanzheng为函数名,int为函数返回值类型,()内为函数参数。编译通过后即可使用。

  四、 VC中DLL的调用

  在VC中调用动态链接库时,类似于Delphi中运行时调用DLL的方法。也要调用到Windows的API函数LoadLibrary,GetProcAddress等。此方法对于调用其它语言和VC编译的DLL均适用。

  假定DLL中包括一个函数:

int yanzheng(CString input,char* zcm)
  
  首先在欲调用DLL函数的cpp文件前部先声明函数指针,定义函数类型:

typedef int (* _YANZHENG)(CString,char* zcm);

  然后定义如下变量∶

HINSTANCE hLibrary;
_YANZHENG yanzheng;

  在调用DLL处加入如下语句进行DLL装载:

hLibrary=LoadLibrary("zcdll.dll");
yanzheng=(_YANZHENG)GetProcAddress(hLibrary,"yanzheng");
shuchu= (*yanzheng)(shuru,zcm);
FreeLibrary(hLibrary);

  五、 几点提示

  (1)如果用Delphi创建DLL时用到其它的form,则在DLL的输出函数中应包括form的create(创建)和free(释放),而且在显示该窗口时只能用showmodal过程,不能用show过程,在后面的例子中能详细看到。

  (2)如果Delphi创建的DLL中的函数或过程,用string类型作为参数输入或返回string类型,当用VC或其它程序调用时,经常会出错,反之亦然。为了解决这种情况,使不同程序之间在使用字符串类型时,接口更安全,建议使用pchar类型,而不是string类型。而且要在程序中加入内存管理,使用系统提供的sharemem单元。下面是一个实现将星期标识由数字转换成英文的例子:

uses
sharemem;
exports
makeitaday;
var
mydate:pchar;
function makeitaday(S:integer):pchar;stdcall;export;
implementation
function makeitaday(S:integer):pchar;stdcall;export;
var
thedate:array[0..20] of char;
begin
GetMem(mydate, 200);
if s=1 then thedate:='Sunday ';
file://……….
strpcopy(mydate,thedate);
makeitaday:=mydate;
end;
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章