Delphi-使用dll的初学者

问题描述 投票:1回答:6

我是DLL的新手。而且我不需要创建它们,我只需要使用一个即可。我已经阅读了一些教程,但是它们没有我希望的那样有用。

这是我的开始方式:我已经下载了需要使用的SDK(ESTOS Tapi Server)。我阅读了文档,发现了我需要使用的DLL,即ENetSN.dll,因此我进行了注册。

接下来,我使用Dependency Walker来研究DLL-我想知道是因为只有这些函数:DllCanUnloadNow,DllGetClassObject,DllRegisterServer和DllUnregisterServer,而这些不是文档中提到的函数。

我想我必须调用DllGetClassObject才能从DLL中获取一个对象,然后我就可以开始使用它。不幸的是,我发现的教程没有提到如何完成(或者我不理解)。

还有为VB和C ++提供的3个示例,但我无法将它们“翻译”为delphi。

[如果有人知道其中有解释的教程,或者可以为我提供正确指导的指导,我将非常感激。

delphi dll
6个回答
4
投票

这三个导出的函数表示它是一个COM / ActiveX DLL,如果运气好的话,可以通过Project-> Import Type Library获取它。


4
投票

忘记该库是DLL。从必须注册DLL以及从其导出的功能来看,它是一个COM / OLE / ActiveX库。对于这些,您不必担心它们是DLL。相反,您可以通过创建其中包含的COM类的实例来使用它们。查找CreateComObjectCreateAutoObject和类似方法。使用类型库导入器时(请参阅Alex K的文章),您甚至可以使用几个(可能是非可视的)组件。


2
投票

您可能想了解Delphi 2010的延迟加载库(DLL)的新功能。有关文章和更多详细信息,请参见http://www.drbob42.com/examines/examinC1.htm


1
投票

多年前我写了一篇有关Delphi DLL的教程,您可以在DLLs made simple上找到它。我不知道它是否会有用,因为我已经有一段时间没有与Delphi一起正常工作了,但是我可以说这将有助于向初学者全面介绍基本知识。如果没有用,请通知我,我将删除此“答案” ...


0
投票

如果要在应用程序中调用Dll过程或函数,请按照以下过程进行操作

procedure TForm1.DllBtnClick(Sender: TObject);

  {Step: 1 To call DLL procedure/function from your program, you first have to 
  declare a type that describes the procedure:}

type
  TSayHello = procedure(pParam: Parameters in the Dll Procedure); 
var
  DLLInstance : THandle;
  SayHello : TSayHello;
begin

  {Step 2: You must load the library}

  DLLInstance := LoadLibrary(`c:\Mydll.dll');
  if DLLInstance = 0 then begin
    MessageDlg(`Unable to load DLL.', mtError, [mbOK], 0);
    Exit;
  end;

  {Step : 3 Get the address of the procedure using GetProcAddress. }

  @SayHello := GetProcAddress(DLLInstance, 'SayHello');
  if @SayHello <> nil then

  {Step: 4 Call your function}

    SayHello(Self)  
  else
    MessageDlg(`Unable to locate procedure.', mtError, [mbOK], 0);

  {Step: 5 Free the Dll}

  FreeLibrary(DLLInstance);
end;

0
投票

NirSoft的DLL导出查看器(http://www.nirsoft.net/utils/dll_export_viewer.html)能够列出COM DLL方法。

© www.soinside.com 2019 - 2024. All rights reserved.