Delphi-使用dll';初学者入门指南

Delphi-使用dll';初学者入门指南,delphi,dll,Delphi,Dll,我对DLL完全是个新手。我不需要创造它们,我只需要使用一个。 我读过一些教程,但没有我希望的那么有用 我是这样开始的: 我已经下载了我需要使用的SDK()。 我阅读了文档,发现了我需要使用的DLL,即ENetSN.DLL,所以我注册了它 接下来,我使用Dependency Walker查看了DLL—我想知道的是,只有以下函数:DllCanLoadNow、DllGetClassObject、DllRegisterServer和DllUnregisterServer,而这些不是文档中提到的函数 我想

我对DLL完全是个新手。我不需要创造它们,我只需要使用一个。 我读过一些教程,但没有我希望的那么有用

我是这样开始的: 我已经下载了我需要使用的SDK()。 我阅读了文档,发现了我需要使用的DLL,即ENetSN.DLL,所以我注册了它

接下来,我使用Dependency Walker查看了DLL—我想知道的是,只有以下函数:DllCanLoadNow、DllGetClassObject、DllRegisterServer和DllUnregisterServer,而这些不是文档中提到的函数

我想我必须调用DllGetClassObject来从DLL中获取一个对象,然后才能开始工作。不幸的是,我找到的教程没有提到如何做到这一点(或者我不理解)

也有3个Exvices提供给VB和C++,但我不能把它们翻译成Delphi。


如果有人知道教程中对此进行了解释,或者可以给我一个指向正确方向的指针,我将非常感谢。

3个导出函数表明它是一个COM/ActiveX DLL,如果您幸运地注册了它,您可以通过Project->Import Type Library获得它。

3个导出函数表明它是COM/ActiveX DLL,如果您幸运地注册了它,您可以通过Project->Import Type Library获得它。

如果您想在应用程序中调用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;
程序TForm1.DllBtnClick(发送方:TObject);
{步骤:1要从程序中调用DLL过程/函数,首先必须
声明一个描述过程的类型:}
类型
TSayHello=过程(pParam:Dll过程中的参数);
变量
实例:坦德尔;
您好:蔡海洛;
开始
{步骤2:必须加载库}
DLLInstance:=LoadLibrary(`c:\Mydll.dll');
如果DLLInstance=0,则开始
MessageDlg(`无法加载DLL',mtError[mbOK],0);
出口
终止
{步骤:3使用GetProcAddress获取过程的地址。}
@SayHello:=GetProcAddress(DLLInstance,'SayHello');
如果@SayHello nil那么
{步骤:4调用您的函数}
你好(自我)
其他的
MessageDlg(`无法定位过程',mtError[mbOK],0);
{步骤:5释放Dll}
免费图书馆;
终止

如果要在应用程序中调用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;
程序TForm1.DllBtnClick(发送方:TObject);
{步骤:1要从程序中调用DLL过程/函数,首先必须
声明一个描述过程的类型:}
类型
TSayHello=过程(pParam:Dll过程中的参数);
变量
实例:坦德尔;
您好:蔡海洛;
开始
{步骤2:必须加载库}
DLLInstance:=LoadLibrary(`c:\Mydll.dll');
如果DLLInstance=0,则开始
MessageDlg(`无法加载DLL',mtError[mbOK],0);
出口
终止
{步骤:3使用GetProcAddress获取过程的地址。}
@SayHello:=GetProcAddress(DLLInstance,'SayHello');
如果@SayHello nil那么
{步骤:4调用您的函数}
你好(自我)
其他的
MessageDlg(`无法定位过程',mtError[mbOK],0);
{步骤:5释放Dll}
免费图书馆;
终止

忘记库是DLL。从您必须注册DLL的事实和它导出的函数来看,它是一个COM/OLE/ActiveX库。对于这些,您不关心它们是DLL。相反,您可以通过创建其中包含的COM类的实例来处理它们。查找
CreateComObject
CreateAutoObject
和类似方法。当使用类型库导入器(参见Alex K的帖子)时,您甚至可能会使用一些(可能是非可视的)组件。

忘记库是一个DLL。从您必须注册DLL的事实和它导出的函数来看,它是一个COM/OLE/ActiveX库。对于这些,您不关心它们是DLL。相反,您可以通过创建其中包含的COM类的实例来处理它们。查找
CreateComObject
CreateAutoObject
和类似方法。当使用类型库导入器(参见Alex K的帖子)时,您甚至可能需要使用几个(可能是非可视的)组件。

您可能需要查看Delphi 2010的延迟加载库(DLL)新功能。有关文章和更多详细信息,请参阅。

您可能希望查看Delphi 2010的延迟加载库(DLL)新功能。有关文章和更多详细信息,请参阅。

多年前我写了一篇关于Delphi DLL的教程,您可以在上找到它。我不知道它是否有用,因为我已经有一段时间没有正确地使用Delphi了,但是我可以说它将有助于向一个完全的初学者解释基础知识。如果它是无用的,让我知道,我会删除这个“答案”

很多年前我写了一篇关于Delphi DLL的教程,你可以在上找到它。我不知道它是否有用,因为我已经有一段时间没有正确地使用Delphi了,但是我可以说它将有助于向一个完全的初学者解释基础知识。如果它是无用的,让我知道,我会删除这个“答案”

NirSoft的DLL导出查看器()能够列出COM DLL方法。

NirSoft的DLL导出查看器()能够列出COM DLL方法。

通常正确,但不适用于此处,因为OP显然处理的是一个COM库,您以非常不同的方式与之交互。通常正确,但不适用于此处,因为OP显然处理的是一个COM库,您以非常不同的方式与之交互。谢谢,成功了;)维基百科上关于COM的条目对我也很有帮助。谢谢,这很有效;)维基百科上关于COM的条目对我也很有帮助。这是一个很有用的答案,因为谷歌搜索会给那些想加载普通非C语言的人带来帮助