【问题标题】:System.EntryPointNotFoundException: Unable to find an entry pointSystem.EntryPointNotFoundException:找不到入口点
【发布时间】:2014-10-30 23:53:52
【问题描述】:

我已将 VB6 转换为 c#,同时执行它会产生此错误

来自 VB6

Declare Function OpenCommPort Lib "C:\Program Files\MR705API.dll" Alias "?OpenCommPort@@YGHPADPAPAX@Z" (ByVal PortName As String, ByRef hCom As Long) As Long
Declare Function CloseCommPort Lib "C:\Program Files\MR705API.dll" Alias "?CloseCommPort@@YGHPAX@Z" (ByVal hCom As Long) As Long
Declare Function SetLED Lib "C:\Program Files\MR705API.dll" Alias "?SetLED@@YGHPAXEE@Z" (ByVal hCom As Long, ByVal Led As Byte, ByVal Addr As Byte) As Long
Declare Function ActiveBuzzer Lib "C:\Program Files\MR705API.dll" Alias "?ActiveBuzzer@@YGHPAXEE@Z" (ByVal hCom As Long, ByVal DelayTime As Byte, ByVal Addr As Byte) As Long
Declare Function Iso14443Reqa Lib "C:\Program Files\MR705API.dll" Alias "?Iso14443Reqa@@YGHPAXEPAEE@Z" (ByVal hCom As Long, ByVal ReqAMode As Byte, ByVal ATQ As String, ByVal Addr As Byte) As Long
Declare Function Iso14443Anticoll Lib "C:\Program Files\MR705API.dll" Alias "?Iso14443Anticoll@@YGHPAXEPAE1E@Z" (ByVal hCom As Long, ByVal AnticollMode As Byte, ByVal Uid As String, ByVal MultiTag As String, ByVal Addr As Byte) As Long

在 C# 中

        [DllImport ("MR705API.dll")]
        public static extern long OpenCommPort(String portName, ref long hCom ); 

        [DllImport ("MR705API.dll")]
        public static extern long CloseCommPort(long hCom);

        [DllImport ("MR705API.dll")]
        public static extern long SetLED(long hCom, byte Led , byte Addr);

        [DllImport ("MR705API.dll")]
        public static extern long ActiveBuzzer (long hcom, byte DelayTime, byte Addr);

        [DllImport ("MR705API.dll")]
        public static extern long Iso14443Reqa (long hcom, byte ReqAMode, string ATQ, byte Addr);

以及我如何使用它..

public void doReader() {

            Result = OpenCommPort("COM9", ref HANDLE);
            ....
            ....
}

例外

System.EntryPointNotFoundException: Unable to find an entry point named 'OpenCommPort' in DLL 'MR705API.dll'.

   at TrueReader.MainForm.OpenCommPort(String portName, Int64& hCom)
   at TrueReader.MainForm.doReader() in c:\Users\sattha\Documents\SharpDevelop Projects\TrueReader\TrueReader\MainForm.cs:line 59
   at TrueReader.MainForm.Timer1Tick(Object sender, EventArgs e) in c:\Users\sattha\Documents\SharpDevelop Projects\TrueReader\TrueReader\MainForm.cs:line 54
   at System.Windows.Forms.Timer.OnTick(EventArgs e)
   at System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.Run(Form mainForm)
   at TrueReader.Program.Main(String[] args) in c:\Users\sattha\Documents\SharpDevelop Projects\TrueReader\TrueReader\Program.cs:line 27

谁能指导我,我做错了什么?或者我错过了什么。

我不知道这个 .dll 是怎么写的,用什么语言写的。

但它以前在VB6中使用过。

【问题讨论】:

  • VB6 中的 long 等同于 .NET 中的 In32,因此您的 PInvokes 是错误的。如果找不到匹配错误的 sig,则会导致该错误
  • @Plutonix 你的意思是我必须从 long 改为 int32 ?
  • @Plutonix 它不管用
  • 是的,我指的是这个。
  • @JongzPuangput “system.accessviolationexception 试图读取或写入受保护的内存” - 通常表明 p-invoke 声明不正确。例如int 长度不正确;缺少outparams;指针;等等

标签: c# vb6


【解决方案1】:

您应该为每个 DLLIMPORT 函数定义入口点

只需将入口点从您的 VB6 代码中的 Alias 复制到 C#

例如... VB6 中的“OpenCommPort”

别名“?OpenCommPort@@YGHPADPAPAX@Z”

TO -> C# 中的“OpenCommPort”

[DllImport ("MR705API.dll",
EntryPoint="?OpenCommPort@@YGHPADPAPAX@Z")]
public static extern int OpenCommPort(string portName, ref int hCom); 

附加

longVB6 中等同于 intC#

【讨论】:

    猜你喜欢
    • 2020-06-02
    • 2015-02-03
    • 2012-12-08
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    • 2017-01-09
    相关资源
    最近更新 更多