eigene DLL/Automation einbinden

6. Dezember 2016 10:24

Hallo zusammen,

ich versuche mich gerade auf einem für mich ziemlich neuen Gebiet.
Wir werden bald eine Waage bekommen, die ich gern per selbst geschriebener DLL von NAV aus fernsteuern und abfragen möchte.

Zu Übungszecken wollte ich zunächt eine kleine in VB Studio 2015 erstellte TEST-DLL als Automation einbinden.
Code:
namespace eigeneBibliothek
{
    public class MatheKlasse
    {
        public int x = 0;
        private static MatheKlasse instanzvar = null;

        private MatheKlasse()
        {

        }

        public static MatheKlasse getInstance()
        {
            if (instanzvar == null)
                instanzvar = new MatheKlasse();
            return instanzvar;
        }

        public long Add(long i, long j)
        {
            return (i + j);
        }

        public long Multiply(long x, long y)
        {
            return (x * y);
        }
    }
}


Leider bekomme ich die Datei nicht Registiert - weder über "Benutzerdefinierte Controls" noch über "regsvr32"
Ich bekomme immer die Meldung dass das Modul geladen wurde der DllRegisterServer-Eingangspunkt nicht gefunden wurde...
Wenmn ich die dll in einem Programm in VB Studio benutze funktioniert sie wunderbar.

Kann mir jemand auf die Spünge helfen? Mache ich etwas grundlegendes falsch?

Vielen Dank und Gruß
Matthias

Re: eigene DLL/Automation einbinden

6. Dezember 2016 10:43

Hallo,

wichtig ist, das du im Visualstudio ein COM-Objekt erstellst. nur die lassen sich in NAV-CC vervenden. Ob das in VS2015 allerdings noch geht, kann ich dir jetzt nicht beantworten.

Gruß Fiddi

Re: eigene DLL/Automation einbinden

21. Dezember 2016 11:27

Danke Fiddi!

Der Ansatz scheint wohl falsch zu sein - in Visiual Studio 2015 werden wohl nur noch .NET Objekte unterstützt (Wenn ich das richtig verstanden habe)

Mit welchen programmen entwickelt Ihr sowas? Kann mir jemand einen Tip geben wo ich vielleicht Bespiele herbekomme?

Danke an alle im Voraus!
Gruß Matthias

Re: eigene DLL/Automation einbinden

21. Dezember 2016 11:45

Hallo,

dann ist wohl Visualstudio 2015 der falsche Ansatz. :wink:

Da musst du dir dann eine ältere VS- Version besorgen. Ich meine VS 2013 kann es noch, hab es jetzt aber noch nicht ausprobiert.

Der einzige Weg im CC Dlls zu verwenden ist über den COM- Weg.

Gruß Fiddi

Re: eigene DLL/Automation einbinden

21. Dezember 2016 14:03

Vorschlag mit Sicht auf die kommenden Jahre: Update auf NAV 2009 R2, das ist normalerweise kein großer Akt, weil seinerzeit fast alle Ressourcen in den RTC geflossen ist, und dann wäre DotNet (mit Einschränkungen) beim RTC als Datentyp einsetzbar, und den CC kann man weiterhin wie bisher nutzen.

https://blogs.msdn.microsoft.com/nav/2010/10/27/net-interoperability-in-nav-2009-r2/
https://blogs.msdn.microsoft.com/nav/2011/05/02/getting-started-with-an-add-in-assembly-for-microsoft-dynamics-nav-2009-r2/

Re: eigene DLL/Automation einbinden

21. Dezember 2016 14:28

himi81 hat geschrieben:Der Ansatz scheint wohl falsch zu sein - in Visiual Studio 2015 werden wohl nur noch .NET Objekte unterstützt (Wenn ich das richtig verstanden habe)
Aktuell sehe ich keinen Grund, warum das nicht funktionieren sollte, angelehnt an diese Beschreibung: hier

Re: eigene DLL/Automation einbinden

22. Dezember 2016 12:14

Hallo zusammen,

der Link von Carsten scheint vielversprechend zu sein - vielleicht geht es mit 2015 doch. Vielen Dank dafür.
Mir fehlt aber wohl ein wenig Hintergrundwissen um hier mit "try an error" weiter zu kommen.

Ich habe das Beispiel versucht nachzuvollziehen - meine Einstellungen sehen so aus (siehe Einstellungen_VB.JPG)
Beim komplilieren bekomme ich aber 2 Fehlermeldungen:
CS0234 Der Typ- oder Namespacename "Forms" ist im Namespace "System.Windows" nicht vorhanden. (Möglicherweise fehlt ein Assemblyverweis.)
und
CS0103 Der Name "MessageBox" ist im aktuellen Kontext nicht vorhanden.
Daraufhin habe ich die beiden Zeilen ersteinmal auskommiert... wollte mich später drum kümmern.

Nun Konnte ich die .dll Datei erstellen. Beim registieren bekomme ich aber immer noch Fehlermeldungen - auch wenn ich die Datei direkt ins Clientverzeichnis schiebe:

Fehler:
RegSvr32

Das Modul C:\Program Files (x86)\Microsoft Dynamics NAV\60\Classic\HelloWorldCom.dll wurde geladen, aber der DllRegisterServer-Eingangspunkt wurde nicht gefunden.
Stellen Sie sicher, dass C:\Program Files (x86)\Microsoft Dynamics NAV\60\Classic\HelloWorldCom.dll eine gültige .DLL- oder .OCX-Datei ist, und wiederholen Sie den Vorgang.

Fehler über Benutzerdefinierte Controls:
Das OLE Control konnte nicht registriert werden.
Pfad: C:\Program Files (x86)\Microsoft Dynamics NAV\60\Classic\HelloWorldCom.dll

Irgendetwas grundlegendes mache ich noch falsch...

Woher kommen die Guid's im Quellcode? Muss ich diese ändern?
Wo muss ich die Dateien genau hinkopieren?
Wie bekomme ich raus das ich jetzt wirklich ein COM - Objekt habe?
Woran könnte es noch liegen?

Vielen Dank und Gruß
Matthias
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: eigene DLL/Automation einbinden

22. Dezember 2016 12:21

Hast du die Dll signiert? (in deinem Screenshot Reiter "Signierung")

Gruß Fiddi

Re: eigene DLL/Automation einbinden

22. Dezember 2016 12:23

Ja, habe ich.

aber dieser Teil ließ sich nicht ausführen:
"C:\Programme\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /u HelloWorldCom.dll
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe" HelloWorldCom.dll /unregister /tlb:HelloWorldCom.tlb del HelloWorldCom.tlb

deshalb habe ich es dann mit dem Clientverzeichnis versucht.

Gruß Matthias

Re: eigene DLL/Automation einbinden

22. Dezember 2016 12:27

NACHTRAG:

Sorry falschen Code kopiert:
"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe" HelloWorldCom.dll /tlb:HelloWorldCom.tlb
"C:\Programme\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /i HelloWorldCom.dll

Re: eigene DLL/Automation einbinden

22. Dezember 2016 12:28

dreh mal das .net- Framework in deinem Projekt auf max. 2 runter.

Gruß Fiddi

Re: eigene DLL/Automation einbinden

22. Dezember 2016 13:27

Habe nun auf 2.0 runtergestellt - keine Veränderung. :-(

Re: eigene DLL/Automation einbinden

19. Januar 2017 13:51

Kleine Anleitung zum Thema:
Automation Data Type and usage in Dynamics NAV