从VB.NET访问DLL

从VB.NET访问DLL,vb.net,visual-studio,dll,header-files,solution,Vb.net,Visual Studio,Dll,Header Files,Solution,我的问题可能已经有了答案,但我没有成功地将数据合成一个连贯的解决方案。谢谢你的建议 我正在使用Visual Basic(.NET 3.5)和Visual Studio 2012编写一个“用户控件”应用程序。我得到了一个DLL文件,其中包含我必须访问的功能。此外,我还得到了相应的.LIB和.H文件,我被告知这些文件是正确使用DLL所必需的。我相信DLL是用C写的 我还收到了一些旧的VB代码,据说这些代码利用了DLL的函数,即DLL“包含”(或其他)在项目中。正如你可能知道的那样,我对这一点的把握充

我的问题可能已经有了答案,但我没有成功地将数据合成一个连贯的解决方案。谢谢你的建议

我正在使用Visual Basic(.NET 3.5)和Visual Studio 2012编写一个“用户控件”应用程序。我得到了一个DLL文件,其中包含我必须访问的功能。此外,我还得到了相应的.LIB和.H文件,我被告知这些文件是正确使用DLL所必需的。我相信DLL是用C写的

我还收到了一些旧的VB代码,据说这些代码利用了DLL的函数,即DLL“包含”(或其他)在项目中。正如你可能知道的那样,我对这一点的把握充其量也很薄弱。下面是VB代码:

Private Declare Function SF_AddToCommandQueue Lib "SFrmUt80.dll" Alias "_SF_AddToCommandQueue@8" _
    (ByVal CmdCode As Integer, ByVal strParam As String) As Boolean

Private Declare Function SF_FlushCommandQueue Lib "SFrmUt80.dll" Alias "_SF_FlushCommandQueue@4" _
    (ByVal strWindowTitle As String) As Boolean

Private Declare Function SF_GetUserName Lib "SFrmUt80.dll" Alias "_SF_GetUserName@8" _
    (ByVal strBuffer As String, ByVal BufferSize As Integer) As Integer

Private Declare Function SF_GetUserID Lib "SFrmUt80.dll" Alias "_SF_GetUserID@0" _
    () As Integer

Private Declare Function SF_GetCmdType Lib "SFrmUt80.dll" Alias "_SF_GetCmdType@0" _
    () As Integer

Private Declare Function SF_GetCmdFilename Lib "SFrmUt80.dll" Alias "_SF_GetCmdFilename@8" _
    (ByVal strBuffer As String, ByVal BufferSize As Integer) As Integer

Private Declare Function SF_GetRegisteredMsg Lib "SFrmUt80.dll" Alias "_SF_GetRegisteredMsg@0" _
    () As Integer
希望这不是太模糊,我想知道如何将这个DLL文件集成到我的解决方案中,以便在VB.NET中使用它的功能


非常感谢你的智慧。谢谢大家!

文件对您没有多大用处,因为您不在托管环境中使用它们。实际上,您只需将
DLL
包含到解决方案中(即,将它们添加到
解决方案资源管理器中的项目中)。
VS为您完成其余的工作,您所需要做的就是,正如您已经做的那样,在源代码中声明库中的函数并调用这些函数


上有一篇关于此的文章。

文件对您没有多大用处,因为您不在托管环境中使用它们。实际上,您只需将
DLL
包含到解决方案中(即,将它们添加到
解决方案资源管理器中的项目中)。
VS为您完成其余的工作,您所需要做的就是,正如您已经做的那样,在源代码中声明库中的函数并调用这些函数


上有一篇关于这方面的文章。

OP显然不是在谈论COM组件或.NET程序集,而是一个C API库。因此,解决方案中不需要包括/管理库。你只需要声明函数。如果项目不知道DLL存在,你如何链接到它?你不知道。链接是在运行时完成的,不是由项目而是由WinAPI函数(
LoadLibrary
GetProcAddress
)完成的。如果要在过程中复制DLL文件,则项目只需要了解DLL文件以用于部署。然而,就解决方案而言,它只是另一个资源文件。这就是我所说的。您需要将它添加到托管项目中,以便解决方案知道它在那里;不一般。这完全取决于项目和其他DLL的部署方式。通常它们是单独部署的(或者是因为它已经安装,比如WinAPI DLL,或者是因为它是由另一个产品的单独安装例程安装的)。OP显然不是指COM组件或.NET程序集,而是指一个C API库。因此,解决方案中不需要包括/管理库。你只需要声明函数。如果项目不知道DLL存在,你如何链接到它?你不知道。链接是在运行时完成的,不是由项目而是由WinAPI函数(
LoadLibrary
GetProcAddress
)完成的。如果要在过程中复制DLL文件,则项目只需要了解DLL文件以用于部署。然而,就解决方案而言,它只是另一个资源文件。这就是我所说的。您需要将它添加到托管项目中,以便解决方案知道它在那里;不一般。这完全取决于项目和其他DLL的部署方式。通常它们是单独部署的(或者是因为它已经安装了,比如WinAPI DLL,或者是因为它是由另一个产品的单独安装例程安装的)。