【发布时间】:2019-02-05 04:49:15
【问题描述】:
我有dll 和使用VB.net. 的示例代码
但是,我需要使用 C# 上的 E5KDAQ.dll 文件在 E5KDAQ.vb 中使用函数。我可以知道如何实现吗?
谁能给出如何使用它的好例子?
E5KDAQ.vb
Imports System.Runtime.InteropServices
Imports System.Threading
Imports System.text
Imports System.IO
Imports System.Environment
Module E5KDAQ
'Public Cm As New MODULE_IOCHANNELS
'TCP/IP Port Declaration
Const TCP_MODBUS_PORT = 502 'MODBUS/TCP
Public Const UDP_ASC_PORT = 1025 'UDP ASCII Command
Public Const UDP_ALARM_PORT = 5168 'UDP alarm port
Public Const UDP_STREAM_PORT = 5148 'UDP stream port
Public Const BROADCAST_IP = "255.255.255.255"
'########## E5KDAQ.DLL Export Functions ###############################################//
<DllImport("E5KDAQ.dll")> _
Public Function E5K_GetRunTimeOS() As Integer
End Function
'----Open/Close module functions -----
<DllImport("E5KDAQ.dll")> _
Public Function E5K_OpenModuleUSB(ByVal devid As Integer) As Short
End Function
<DllImport("E5KDAQ.dll")> _
Public Function E5K_GetLocalIP(ByRef ip0 As Byte,<[In](),Out()>Byref ip1 As Byte,<[In](),Out()> ByRef ip2 As Byte,<[In](),Out()>ByRef ip3 As Byte) As Short
End Function
<DllImport("E5KDAQ.dll")> _
Public Function E5K_DebugPrint(ByVal str As String)
End Function
End Module
我尝试在我的 C# 项目中直接引用 dll 文件,但无法通过以下错误:
我也尝试将 VB 项目编译为类库 带有以下内容:
Class1.vb
Imports System.Runtime.InteropServices
Imports System.Threading
Imports System.Text
Imports System.IO
Imports System.Environment
Public Class Class1
'Public Cm As New MODULE_IOCHANNELS
'TCP/IP Port Declaration
Const TCP_MODBUS_PORT = 502 'MODBUS/TCP
Public Const UDP_ASC_PORT = 1025 'UDP ASCII Command
Public Const UDP_ALARM_PORT = 5168 'UDP alarm port
Public Const UDP_STREAM_PORT = 5148 'UDP stream port
Public Const BROADCAST_IP = "255.255.255.255"
'Type of Event
Public Const ALARM_EVENT_TYPE = 0
Public Const STREAM_EVENT_TYPE = 1
Public Const HIGH_ALARM_EVENT = 0
Public Const LOW_ALARM_EVENT = 1
Public Const AD_ALARM_EVENT = 1
Public Const DI_ALARM_EVENT = 0
<DllImport("Kernel32.Dll")>
Public Function CloseHandle(ByRef hObject As Integer) As Long
End Function
<DllImport("Kernel32.Dll")>
Public Function CreateMutex(ByVal Attr As Integer, ByVal bInitial As Integer, ByVal lpName As Integer) As Integer
End Function
<DllImport("Kernel32.Dll")>
Public Function ReleaseMutex(ByVal hdnl As Integer) As Boolean
End Function
Public Function GetVarPtr(ByVal e As Object) As Integer
Dim GC As GCHandle = GCHandle.Alloc(e, GCHandleType.Pinned)
Dim GC2 As Integer = GC.AddrOfPinnedObject.ToInt32
GC.Free()
Return GC2
End Function
'########## E5KDAQ.DLL Export Functions ###############################################//
<DllImport("E5KDAQ.dll")>
Public Function E5K_GetRunTimeOS() As Integer
End Function
'----Open/Close module functions -----
<DllImport("E5KDAQ.dll")>
Public Function E5K_OpenModuleUSB(ByVal devid As Integer) As Short
End Function
<DllImport("E5KDAQ.dll")>
Public Function E5K_OpenModuleIP(ByVal IP As String, ByVal ConnectTimeout As Integer, ByVal TxTimeout As Integer, ByVal rxTimeout As Integer) As Short
End Function
End Class
我收到以下错误:
那么我如何导入 E5KDAQ.dll 以便我可以成功地将其编译为 C# 使用的类库?
如果有人愿意提供帮助,我可以将示例 vb 项目文件发送给您,因为它可供公众访问。
任何帮助将不胜感激。
【问题讨论】:
-
使用任何 .NET 兼容语言进行编程的要点是,无论 哪个,您都可以从 每个 也生成的其他程序集引用已编译的程序集通过.NET。因此,您可以在 VB.NET 上引用使用 C# 编写的程序集,反之亦然。只需添加对您的项目/程序集的引用即可。
-
重新出现新错误:必须是非实例,那么;在 C# 中称为
static- 在 VB 中称为Shared。所以:将这些方法标记为Shared
标签: c# vb.net-2010