none
DllNotFoundException beim Zugriff auf eine deklarierte Funktion ... RRS feed

  • Frage

  • Ich bemühe mich derzeit ein Beispielprogramm der Fa. FTDI zum Laufen zu bekommen.

    Es handelt sich um eine Software, die zur Kommunikation mit externer Elektronik das SPI-Protokoll nutzt.

    Zur Umsetzung wird ein FTDI-Chip genutzt und dessen MPSSE (Multi Protocol ....) genutzt.

    Zum VB.Net Programm gehört noch eine Dll (FTCSPI.DLL), die heruntergeladen wurde und an verschiedenen Stellen im Compi vorhanden ist (u.a. Windows\System32)

    Die Funktionen sind etwa wie folgt im Programm deklariert:

    Private DeclareFunctionSPI_GetNumDevices Lib"ftcspi"(ByRefNumDevices AsLong) AsInteger

    Dennoch erhalte ich eine DllNotFoundException,sobald auf eine der Dll-Funktionen zugegriffen wird.

    System.DllNotFoundException wurde nicht behandelt.
      Message=Die DLL "ftcspi": Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E) kann nicht geladen werden.
      Source=FT2232CSPIVBNETTestApp
      TypeName=""
      StackTrace:
           bei FT2232CSPIVBNETTestApp.MainForm.SPI_GetNumDevices(Int64& NumDevices)
           bei FT2232CSPIVBNETTestApp.MainForm.TestButton_Click(Object sender, EventArgs e) in C:\Users\administrator\Documents\FT2232CSPIVBNETTestApp\MainForm.vb:Zeile 275.
           bei System.Windows.Forms.Control.OnClick(EventArgs e)
           bei System.Windows.Forms.Button.OnClick(EventArgs e)
           bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
           bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
           bei System.Windows.Forms.Control.WndProc(Message& m)
           bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
           bei System.Windows.Forms.Button.WndProc(Message& m)
           bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
           bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
           bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
           bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
           bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
           bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
           bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
           bei System.Windows.Forms.Application.Run(Form mainForm)
           bei FT2232CSPIVBNETTestApp.MainForm.Main() in C:\Users\administrator\Documents\FT2232CSPIVBNETTestApp\MainForm.vb:Zeile 0.
           bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
           bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
           bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
           bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           bei System.Threading.ThreadHelper.ThreadStart()
      InnerException:

    Für mich hört sich das an, als ob die DLL schlicht nicht gefunden wird.

    Andererseits sind Versuche, die DLL als Verweis dem Prog hinzuzufügen an einer Fehlermeldung gescheitert.

    Es handelt sich mit Wahrscheinlichkeit nicht um eine managed DLL

    Kann mir jemand helfen ?

    Dienstag, 18. September 2012 07:15

Antworten

  • Hallo Nico,

    die DLL ist nicht managed und die Beispielprogramme wie man sie unter

    http://www.ftdichip.com/Support/SoftwareExamples/MPSSE/FTCSPI.htm

    findet, sind mit extremer Vorsicht zu "genießen".

    So sind die Declares offensichtlich unbesehen von VB 6 auf VB.NET übernommen worden.
    Das dort die Datentypen (wie long) eine andere Größe haben, hat man außen vor gelassen.
    Falls Du korrigierte Versionen verwendest (bzw. finden kannst) solltest Du die verwenden.

    Die DLL alleine reicht nicht, zusätzlich brauchst Du die Treiber, FTD2XX.DLL, die als Abhängigkeit geladen wird,
    Downloadseite sollte sein http://www.ftdichip.com/Drivers/D2XX.htm.

    Damit die DLL gefunden wird, binde sie in das Projekt als Inhalt ein und lasse sie ins Ausgabeverzeichnis kopieren.
    Das Projekt muss als X86 übersetzt werden, da die DLL als 32-Bit vorliegt.

    Gruß Elmar
    Dienstag, 18. September 2012 08:00
  • Hallo Nico,

    ich habe das Programm mit FTCSPI und den Treiber DLLs zum Laufen bekommen,
    nur das sich beim Test-Button mangels zugehöriger Hardware nichts mehr rührt...

    Mehr testen kann ich somit nicht.

    FTD2XX war hier schon mehrfach vertreten lt. MSDN-Foren-Suche

    Gruß Elmar

    Dienstag, 18. September 2012 11:36

Alle Antworten