Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   DLL für Verwendung in Navision (https://www.delphipraxis.net/108706-dll-fuer-verwendung-navision.html)

Thanatos81 18. Feb 2008 08:43


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

shmia 18. Feb 2008 09:14

Re: DLL für Verwendung in Navision
 
Zitat:

Zitat von Thanatos81
... dies schlägt aber wohl fehl, da die DLL nicht registriert werden kann.

Du meinst, Regsvr32 deineDLL.dll meldet einen Fehler ?
Dann liegt das daran, dass deine DLL noch Abhändigkeiten zu anderen DLLs (oder Packages) hat, die auf dem Zielrechner fehlen.
Mit dem Dependency Walker kann du deine DLL (auf dem Zielrechner !!!) laden. Das Tool meckert dann fehlende DLLs an.

Thanatos81 18. Feb 2008 12:13

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.

franktron 18. Feb 2008 13:08

Re: DLL für Verwendung in Navision
 
Schaut mal was GOOGLE so alles findet

LINK

Thanatos81 18. Feb 2008 13:33

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?

mkinzler 18. Feb 2008 13:34

Re: DLL für Verwendung in Navision
 
Füge die Funktionen in den Export ein.

Thanatos81 18. Feb 2008 13:42

Re: DLL für Verwendung in Navision
 
Also, ich habe folgende DLL:

Delphi-Quellcode:
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.
Versuche ich nun diese DLL per regsvr32 zu registrieren bekomme ích
Zitat:

Zitat von regsvr32 pvrDLL.dll
---------------------------
RegSvr32
---------------------------
pvrDLL.dll wurde geladen, aber der DllRegisterServer-Eingangspunkt wurde nicht gefunden.

Diese Datei kann nicht registriert werden.
---------------------------
OK
---------------------------

ist ja auch logisch, eine "DllRegisterServer" gibts bei mir ja nicht. Meine Frage ist nun, was in diese Prozedur/Funktion (?) reingehört, damit ich dies umsetzen kann. Ziel ist es, dass regsvr32 pvrDLL.dll nicht mehr fehl schlägt damit Navision diese dann hoffentlich nutzen kann.

mkinzler 18. Feb 2008 13:47

Re: DLL für Verwendung in Navision
 
Du musst diese im Interface der Dll exportieren
http://msdn2.microsoft.com/en-us/library/ms682162.aspx

sirius 18. Feb 2008 13:47

Re: DLL für Verwendung in Navision
 
Delphi-Quellcode:
exports
  DllGetClassObject,
  DllCanUnloadNow,
  DllRegisterServer,
  DllUnregisterServer;
Die Implementation ist in der Unit ComServ, welche eigetnlich über deine *TLB.pas mit eingebunden sein könnte.

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?

Thanatos81 18. Feb 2008 14:01

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 22:52 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz