Dot Net Custom DLL - Could not create Instance

26. April 2018 14:00

Hallo liebe NAV Community

Ich habe folgendes Problem:
Für eine Schnittstelle zu einem Dokumentarchivierungsprogramm benötigten wir custom DotNet Dll's. Diese haben aber immer als runtime Error den Fehler "Cannot create an instance of the following .Net Framework object: DLL Name
In NAV2009R2 haben wir diese über Automations angesprochen was auch funktioniert hat, nun in NAV2017 möchten wir direkt die Dot Net Komponente ansprechen.
Wir haben den Ordner mit den benötigten DLL's in den Ordner C:\Program Files\Microsoft Dynamics NAV\100\Service\Add-ins auf dem NAV Service Tier kopiert.
Im Development enviroment habe ich dann eine DotNet Variable erstellt und dann im Server Tab meine DLL ausgewählt. Ich sehe auch alle Methoden der DLL auf dem Client wie auch auf dem Server, die DLL wird also gefunden.
Doch sobald ich die Funktion starten möchte erhalte ich immer den folgenden Fehler:
NAVDllError.PNG


Diese Fehlermeldung erhalte ich für beide DLL's die wir benötigten, eine davon ist die DLL von https://www.pdf-tools.com/pdf20/de/home/ und eine des Archivprogramms.
Den Fehler erhalte ich sowohl mit RunOnClient=Yes und mit RunOnClient=No
Beim Debuggen kommt der Fehler bereits bei der Instantzierung im C/AL Code: NewPDFAPIL := NewPDFAPIL.Secure; es ist also nicht ein Fehler einer Funktion, sondern die DLL kann gar nicht erst instanziert werden.

Hat jemand eine Idee?
Ich habe bereits einiges versucht:
Die Installation der DLL direkt auf dem Client
clearen des temporären NAV Client addin Ordners
erhöhte Windows Rechte auf den Ordner der die DLL's enthält
Unterschiedliche Versionen der DLL verwendet

Für Hilfe & Vorschläge wäre ich sehr dankbar!

Freundliceh Grüsse
Joshua
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: Dot Net Custom DLL - Could not create Instance

26. April 2018 14:23

Hallo Joshua,

aus eigener Erfahrung heraus würde ich empfehlen diese DLL mal in ein Visual Studio Projekt einzuhängen und zu inspizieren ob diese Instanzierung so richtig ist.
In Dynamics Nav habe ich da jedesmal Probleme und die Vorschläge an Typen und Methoden etc. hören irgendwie ab Ebene 2 einfach auf.

Die neue Instanz zu erzeugen stelle ich mir gerade etwa so vor:
Code:
NewPDFAPIL := NewPDFAPIL;


das man dann NewPDFAPIL.Secure der Instanz ansprechen könnte.

Falls du gerade kein Visual Studio zur Hand hast, es gibt eine Community Version.

Re: Dot Net Custom DLL - Could not create Instance

26. April 2018 14:39

Hallo Nody
Besten Dank für dein Vorschlag, ich habe die DLL als Verweis in VS hinzugefügt aber sehe leider den C# Code nicht, nur die verfügbaren Methoden aufgelistet.
Ich habe dir die DLL in Onedrive hochgeladen (https://1drv.ms/u/s!Ar5DM52h81oYgcQ8vbygQ1x0RDDKww) (im Forum darf ich keine DLL's hochladen), eventuell habe ich sie falsch hinzugefügt im VS.

Ich glaube in C/AL soviel ich gelesen habe muss man zum Instanzieren der .NET Komponenten immer den Constructor der Klasse aufrufen die man verwenden will oder ist dies nicht so? Also z.B TestDLL := TestDLL.TestClass, dies hat so auch funktioniert bei einer kleinen test DLL die ich in VS erstellt habe.

Re: Dot Net Custom DLL - Could not create Instance

26. April 2018 14:57

Das ist genau die frage.
Die Referenz der DLL müsstest du jetzt im Objektkatalog auseinander nehmen können. Evtl steht da was brauchbares.

Wenn es in C# etc so funktioniert müsste es auch in Nav gehen. Irgendwie erinnere ich mich noch das es einen unterschied gemacht hat ob die Klasse Static ist aber da finde ich gerade nichts zu.

Re: Dot Net Custom DLL - Could not create Instance

26. April 2018 15:03

Statische Methoden/Klassen kann man einfach direkt im NAV verwenden also z.B. Testklasse.SendMessage nicht statische Klassen muss man zuerst instanzieren wie ich es eben tue: TestDll := TestDLL.Testklasse und dann erst TestKlasse.SendMessage
Ja ich sehe die Methoden im Referenzkatalog aber ich kann den Code oder den Constructor dahinter nicht sehen im VS

Re: Dot Net Custom DLL - Could not create Instance

26. April 2018 15:06

Syntaktisch funktioniert es im C# erst so.

using Pdftools;
Pdftools.PdfSecure.Secure MeineVariable = new Pdftools.PdfSecure.Secure();

Probier mal bitte im Nav die Klammern mit anzufügen.

Re: Dot Net Custom DLL - Could not create Instance

26. April 2018 16:03

Hi,

ggf. sind die kopierten DLLs auch nur nicht freigegeben -> schau dir mal die Eigenschaften deiner jeweiligen DLLs im ADD-In-Ordner an, ob da nicht zufälligerweise noch "Zulassen" steht.
Falls dem so ist, dann einfach zulassen :)

Re: Dot Net Custom DLL - Could not create Instance

26. April 2018 16:15

Hi sweikelt
Danke für den Hinweis, dies habe ich bereits geprüft die DLL ist bereits zugelassen, sie wurde auch nicht aus dem Internet kopiert.

Re: Dot Net Custom DLL - Could not create Instance

26. April 2018 16:35

Mein Nav ist jetzt bei der einen oder anderen Gelegenheit abgestürzt so das ich ins C# zurück bin.

Der Meldung nach scheint ein nicht unerheblicher Teil in der PDFSecureApi.DLL zu passieren und nicht in der PdfSecureNET.dll.

Hast du NewPDFAPIL := NewPDFAPIL.Secure(); mal probiert ?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.