Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datev SELF32.DLL benutzen (https://www.delphipraxis.net/132511-datev-self32-dll-benutzen.html)

juwil 14. Apr 2009 12:53


Datev SELF32.DLL benutzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich muss eine Buchhaltungsschnittstelle erstellen, die Datev-Dateien über Nutzung der SELF32.DLL erstellt. Leider kann man diese Daten nicht über die DAMO32.EXE erzeugen, da just die benötigten Übergabedaten in diesem Konvertierungsprogramm nicht unterstützt werden (Aussage von Datev).

Mein Problem: Ich kann die Funktionen der Self32.dll nicht aufrufen, ich lande immer in einer Zugriffsverletzung. Wahrscheinlihc mache ich beim Aufruf irgendetwas grundsätzliches falsch ...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  MySelfWrite : SelfWrite; //aus der Self32LIB-TLB.pas
  SWResult:Integer;
begin
  Initialize(MySelfWrite);
  MySelfWrite.Open('Datev-FBOP-BW-KNE','','C:\SELF\',2,99999);
  SWResult:=MySelfWrite.CreateTempSet('Datev-FBOP-BW-KNE');
  showmessage('Res.:'+IntToStr(SWResult));
end;

Wie muss ich die Funktionen der Dll aufrufen bzw. die Klassen verwenden/initialisieren, damit es klappt ?

Die Unit für die Self32.DLL (SELF32LIB_TLB.PAS) hängt an...

Jürgen

DeddyH 14. Apr 2009 13:01

Re: Datev SELF32.DLL benutzen
 
Müsste es nicht so lauten?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  MySelfWrite : TSelfWrite; //aus der Self32LIB-TLB.pas
  SWResult:Integer;
begin
  MySelfWrite := TSelfWrite.Create(nil);
  try
    MySelfWrite.Open('Datev-FBOP-BW-KNE','','C:\SELF\',2,99999);
    SWResult:=MySelfWrite.CreateTempSet('Datev-FBOP-BW-KNE');
    showmessage('Res.:'+IntToStr(SWResult));
  finally
    MySelfWrite.Free;
  end;
end;

Starsky911 14. Apr 2009 21:11

Re: Datev SELF32.DLL benutzen
 
Bei mir sieht es so aus
Delphi-Quellcode:
procedure TForm1.ButtonDatevKNEClick(Sender: TObject);
var
  datev : ISELFWrite;
  li_return: Integer;
begin
  datev:=CoSELFWrite.Create;
  li_return:=datev.Open('Datev-FBOP-BW-KNE','','c:\temp\datev\',2,99999);
  li_return:=datev.CreateTempSet('Datev-FBOP-Vollvorlauf-KNE');
  usw...
ich verwende allerdings von Datev die Version 3.0
und nicht die Version 2.1

juwil 15. Apr 2009 07:30

Re: Datev SELF32.DLL benutzen
 
Das ist schon mal besser...
Ich bekomme jetzt in der Folge erst in der Self32Lib_tlb einen Fehler "Klasse nicht registriert", und zwar bei
Delphi-Quellcode:
procedure TSELFWrite.Connect;
var
  punk: IUnknown;
begin
  if FIntf = nil then
  begin
    punk := GetServer;    //Hier ist Schluss
    Fintf:= punk as ISELFWrite;
  end;
end;
Das hängt aber sicher eher an der Registrierung der Self32.dll.



Zitat:

Zitat von DeddyH
Müsste es nicht so lauten?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  MySelfWrite : TSelfWrite; //aus der Self32LIB-TLB.pas
  SWResult:Integer;
begin
  MySelfWrite := TSelfWrite.Create(nil);
  try
    MySelfWrite.Open('Datev-FBOP-BW-KNE','','C:\SELF\',2,99999);
    SWResult:=MySelfWrite.CreateTempSet('Datev-FBOP-BW-KNE');
    showmessage('Res.:'+IntToStr(SWResult));
  finally
    MySelfWrite.Free;
  end;
end;


juwil 15. Apr 2009 07:34

Re: Datev SELF32.DLL benutzen
 
Auch mit dieser Lösung geht es ein Stück weiter.
Allerdings dann auch direkt ein Fehler "Klasse nicht registriert" bei

Delphi-Quellcode:
class function CoSELFWrite.Create: ISELFWrite;
begin
  Result := CreateComObject(CLASS_SELFWrite) as ISELFWrite;
end;
Da muss ich wohl die Registrierung der Self32.dll nochmal prüfen.


Zitat:

Zitat von Starsky911
Bei mir sieht es so aus
Delphi-Quellcode:
procedure TForm1.ButtonDatevKNEClick(Sender: TObject);
var
  datev : ISELFWrite;
  li_return: Integer;
begin
  datev:=CoSELFWrite.Create;
  li_return:=datev.Open('Datev-FBOP-BW-KNE','','c:\temp\datev\',2,99999);
  li_return:=datev.CreateTempSet('Datev-FBOP-Vollvorlauf-KNE');
  usw...
ich verwende allerdings von Datev die Version 3.0
und nicht die Version 2.1


Starsky911 15. Apr 2009 10:32

Re: Datev SELF32.DLL benutzen
 
Hallo juwil,

ich denke auch das es mit der Registrierung des
Com-Objektes zusammen hängt.

Deinstalliere doch das Objekt doch nochmal mit:

regsvr32.exe /u self32.dll

und installiere es neu mit:

regsvr32.exe /i self32.dll

juwil 15. Apr 2009 10:48

Re: Datev SELF32.DLL benutzen
 
Ja, da ist was faul.
Die Deinstallation ging, aber das registrieren läuft auf einen Fehler.
Ich werde erst mal die Datev-Dokumentation zur Registrierung der Dll nachlesen, denn dor sind offensicltich einige Schritte manuell in der Registry einzutragen...
Danke

Zitat:

Zitat von Starsky911
Hallo juwil,

ich denke auch das es mit der Registrierung des
Com-Objektes zusammen hängt.

Deinstalliere doch das Objekt doch nochmal mit:

regsvr32.exe /u self32.dll

und installiere es neu mit:

regsvr32.exe /i self32.dll


juwil 15. Apr 2009 11:05

Re: Datev SELF32.DLL benutzen
 
ES GEHT !
Danke. Nach der Deinstallation der DLL und erneuter Registrierung sowie manuellem Eintrag eines Registry-Eintrages
[C:\WINDOWS\SYSTEM\self32.dll / DWORD -> muss auch tatsächlich in den Ordner SYSTEM] geht es !

Jürgen



Zitat:

Zitat von juwil
Ja, da ist was faul.
Die Deinstallation ging, aber das registrieren läuft auf einen Fehler.
Ich werde erst mal die Datev-Dokumentation zur Registrierung der Dll nachlesen, denn dor sind offensicltich einige Schritte manuell in der Registry einzutragen...
Danke

Zitat:

Zitat von Starsky911
Hallo juwil,

ich denke auch das es mit der Registrierung des
Com-Objektes zusammen hängt.

Deinstalliere doch das Objekt doch nochmal mit:

regsvr32.exe /u self32.dll

und installiere es neu mit:

regsvr32.exe /i self32.dll




Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 Uhr.

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