![]() |
DLL für Verwendung in Navision
Guten Morgen allerseits!
Ich habe für eine DLL geschrieben, welche sich mit Delphi und auch VBA unter Excel wunderbar verwenden lässt. Die DLL an sich ist also soweit in Ordnung. Nun möchte ein Anwender diese DLL in Navision einbinden, dies schlägt aber wohl fehl, da die DLL nicht registriert werden kann. Das kann sie nicht weil es a) bisher nicht nötig war und b) ich keinen Dunst habe, was ich dafür machen muss, was für Voraussetzungen erfüllt sein müssen etc. Hat jemand schon Erfahrung damit, DLLs für Navision bereit zu stellen und kann mir den einen oder anderen Fingerzeig geben, oder kennt vielleicht sogar ein Tutorial? Schönen Gruß, Thomas |
Re: DLL für Verwendung in Navision
Zitat:
Dann liegt das daran, dass deine DLL noch Abhändigkeiten zu anderen DLLs (oder Packages) hat, die auf dem Zielrechner fehlen. Mit dem ![]() |
Re: DLL für Verwendung in Navision
Nee, die Dependencies sind schon OK. Die DLL war nie dafür gedacht registriert zu werden, dementsprechend bekomme ich nun:
"[...] der DllRegisterServer-Eingangspunkt wurde nicht gefunden." Meine Frage ist jetzt, was ich unternehmen muss, damit meine DLL registriert werden kann. Ich werde wohl eine DllRegisterServer exportieren müssen ;-) Nur was gehört darein? Dann brauchts ja wohl auch noch eine DllUnregisterServer usw. |
Re: DLL für Verwendung in Navision
|
Re: DLL für Verwendung in Navision
OK, da steht auch nur, dass die DLL registriert sein muss, und wie man es macht. Aber wie ändere ich meine in Delphi geschriebene DLL so, dass ich sie registrieren kann?
|
Re: DLL für Verwendung in Navision
Füge die Funktionen in den Export ein.
|
Re: DLL für Verwendung in Navision
Also, ich habe folgende DLL:
Delphi-Quellcode:
Versuche ich nun diese DLL per regsvr32 zu registrieren bekomme ích
library pvrDLL;
uses SysUtils, Forms, ActiveX, RemoteViewXLib_TLB, ConnThread in 'ConnThread.pas'; {$R *.res} var dummyForm: TForm; procedure DLLStart; stdcall; begin //initialisieren OleInitialize(nil); dummyForm := TForm.Create(nil); dummyForm.Visible := false; RemoteView := TRemoteViewX.Create(dummyForm); RemoteView.Parent := dummyForm; RemoteView.Left := 5; RemoteView.Top := 5; RemoteView.Width := 10; RemoteView.Height := 10; end; procedure DLLStop; stdcall; begin //finalisieren RemoteView.Disconnect; FreeAndNil(RemoteView); FreeAndNil(dummyForm); OleUninitialize; end; procedure ConnectTo(IP: PChar; CamNo: Integer; UserID, UserPW: PChar); stdcall; var myConnThread: TConnThread; begin RemoteView.IPAddress := IP; RemoteView.CCDNo := CamNo; RemoteView.LoginID := UserID; RemoteView.LoginPwd := UserPW; myConnThread := TConnThread.Create; end; function IsConnected: WordBool; stdcall; begin result := RemoteView.IsConnected; end; function getPicture(fileName: PChar; EnableOSD, Transparent: WordBool) :WordBool; stdcall; begin result := RemoteView.SnapShoot(fileName, EnableOSD, Transparent); end; exports DLLStart, DLLStop, ConnectTo, IsConnected, getPicture; begin end. Zitat:
|
Re: DLL für Verwendung in Navision
Du musst diese im Interface der Dll exportieren
![]() |
Re: DLL für Verwendung in Navision
Delphi-Quellcode:
Die Implementation ist in der Unit ComServ, welche eigetnlich über deine *TLB.pas mit eingebunden sein könnte.
exports
DllGetClassObject, DllCanUnloadNow, DllRegisterServer, DllUnregisterServer; Wenn du keinen COMServer hast (verstehe zwar nicht, warum man das dann registrieren sollte :gruebel:), dann schreibst du dir halt die Funktionen mit den Standardantworten (E_NoEntrance bzw. S_OK). PS: Und was ist mit dem Link von franktron? |
Re: DLL für Verwendung in Navision
Die *TLB ist nicht von mir.
Ich erklär mal kurz was überhaupt Sinn und Zweck ist. Unser Kunde hat von uns eine Kamerainstallation per PCI-Karten. Diese liefern eine ActiveX mit. Bisher ist dieses ActiveX in eine Internetseite angebunden, dort können die Livestreams dann angeschaut werden. Nun möchte der Kunde die Streams teilweise auch Einzelbilder in Navision sehen können. Unter Delphi kann ich das ActiveX ohne Probleme einbinden und nutzen. Der Kunde kann dies in Navision nicht, da er keine ActiveX-Controls einbinden kann, welche eine grafische Oberfläche haben. Wird die GUI des ActiveX nicht genutzt, bekommt man aber keine Verbindung. Also habe ich die oben gepostete DLL quasi als Wrapper für das ActiveX geschrieben, diese erzeugt ein Snapshot und speichert den unter dem übergegeben Namen. Unter Delphi und Excel (VBA) konnte ich die Wrapper-DLL auch erfolgreich nutzen. Nun sagt aber der Kunde, er könne in Navision nur registrierte DLLs nutze, meine lässt aber nicht registrieren. //Edit Habe jetzt mal einfach die exports um die Angaben von shmia erweitert. Das Registrieren funktioniert nun auch. Aber reicht das? Muss ich nicht noch eigentlich eine GUID erzeugen und WEiteres machen? Der Link von franktron beschreibt, wie Navision selber die DLL registrieren kann, die es nutzen soll, damit man die nicht an jedem Arbeitsplatz von Hand machen muss, oder hab ich das völlig falsch verstanden? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz