2013-03-17 88 views
0

我的問題的答案可能已經存在,但我沒有成功將數據合成爲一致的解決方案。你的建議表示讚賞。從VB .NET訪問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 "[email protected]" _ 
    (ByVal CmdCode As Integer, ByVal strParam As String) As Boolean 

Private Declare Function SF_FlushCommandQueue Lib "SFrmUt80.dll" Alias "[email protected]" _ 
    (ByVal strWindowTitle As String) As Boolean 

Private Declare Function SF_GetUserName Lib "SFrmUt80.dll" Alias "[email protected]" _ 
    (ByVal strBuffer As String, ByVal BufferSize As Integer) As Integer 

Private Declare Function SF_GetUserID Lib "SFrmUt80.dll" Alias "[email protected]" _ 
    () As Integer 

Private Declare Function SF_GetCmdType Lib "SFrmUt80.dll" Alias "[email protected]" _ 
    () As Integer 

Private Declare Function SF_GetCmdFilename Lib "SFrmUt80.dll" Alias "[email protected]" _ 
    (ByVal strBuffer As String, ByVal BufferSize As Integer) As Integer 

Private Declare Function SF_GetRegisteredMsg Lib "SFrmUt80.dll" Alias "[email protected]" _ 
    () As Integer 

希望這是不是太模糊了,我想知道我如何去了解這個DLL文件集成到我的解決方案,讓我可以做在VB .NET利用它的功能。

您的智慧是非常感謝。謝謝!

回答

0

.H -files對你沒有多大用處,因爲你不在託管環境中使用它們。實際上,您只需將DLL添加到您的解決方案中(即將其添加到Solution-Explorer中的項目中)。
VS爲你完成剩下的工作,你所要做的就是像你已經做過的那樣,在源代碼中聲明庫中的函數並調用函數。

MSDN有一篇關於此的文章。

+1

OP顯然不是在談論COM組件或.NET程序集,而是C API庫。因此,該庫不需要在解決方案中包含/管理。你只需聲明這些函數。 – 2013-03-17 21:00:10

+0

如果項目不知道它存在,那麼如何鏈接到DLL? – 2013-03-17 21:02:09

+1

你沒有。鏈接在運行時完成,而不是由項目而是由WinAPI函數('LoadLibrary'和'GetProcAddress')完成。該項目只需要知道該DLL文件的部署目的,如果它應該在過程中複製。但是,就解決方案而言,它只是另一個資源文件。 – 2013-03-17 21:16:52