Delphi-使用dll';初学者入门指南
我对DLL完全是个新手。我不需要创造它们,我只需要使用一个。 我读过一些教程,但没有我希望的那么有用 我是这样开始的: 我已经下载了我需要使用的SDK()。 我阅读了文档,发现了我需要使用的DLL,即ENetSN.DLL,所以我注册了它 接下来,我使用Dependency Walker查看了DLL—我想知道的是,只有以下函数:DllCanLoadNow、DllGetClassObject、DllRegisterServer和DllUnregisterServer,而这些不是文档中提到的函数 我想我必须调用DllGetClassObject来从DLL中获取一个对象,然后才能开始工作。不幸的是,我找到的教程没有提到如何做到这一点(或者我不理解)Delphi-使用dll';初学者入门指南,delphi,dll,Delphi,Dll,我对DLL完全是个新手。我不需要创造它们,我只需要使用一个。 我读过一些教程,但没有我希望的那么有用 我是这样开始的: 我已经下载了我需要使用的SDK()。 我阅读了文档,发现了我需要使用的DLL,即ENetSN.DLL,所以我注册了它 接下来,我使用Dependency Walker查看了DLL—我想知道的是,只有以下函数:DllCanLoadNow、DllGetClassObject、DllRegisterServer和DllUnregisterServer,而这些不是文档中提到的函数 我想
也有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语言的人带来帮助