AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

OLE. DLL Zugriff. XE2

Ein Thema von matashen · begonnen am 12. Nov 2014 · letzter Beitrag vom 13. Nov 2014
Antwort Antwort
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
471 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

OLE. DLL Zugriff. XE2

  Alt 12. Nov 2014, 15:18
Hallo zusammen,

der Titel ist etwas abgehakt aber im Prinzip gehts genau darum.

Ich habe für einen Zugriff auf unseren MES-Server eine dll. Ein Kollege von mir hat in Delphi (Ich glaube Turbo Delphi) eine Beispielanwendung geschrieben für den Zugriff über die dll auf unseren MES-Server.

Wenn ich einen Zugriff mit meinem XE2 auf den Server mache bekomme ich entweder eine Rückmeldung von der dll "-1000: Server nicht gefunden" oder eine Meldung "OLE Fehler FFFFFFF".

das heist ich kompilier auch nur die Beispielanwendung von meinem Kollegen. Bei meinem XE2 gehts nicht. Bei seinem Uralt-Delphi gehts.

Ist da ein bekannter Fehler in XE2. Updates hät ich aber alle inkl. des letzten Hotfix.

Langsam glaub ich nicht an einen Fehler meinerseits sondern an einen Fehler vom XE2. Das Netz hab ich mir heute schon Wund-gegoogelt aber auf eine Lösung bin ich nicht gestoßen.

Evtl. hat jemand von euch da Erfahrungen/Informationen.

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: OLE. DLL Zugriff. XE2

  Alt 12. Nov 2014, 15:41
Das ist sicherlich ein UniCode-Problem. Achte auf PChar -> PAnsiChar usw.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
471 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: OLE. DLL Zugriff. XE2

  Alt 12. Nov 2014, 16:02
Naja wenn ich einfach den Severstatus abfrage läuft nicht viel Text

mal hier der Auszug

Delphi-Quellcode:
    Path := ExtractFilePath(ParamStr(0))+'mes_toolbox.dll'; // Wenn Dll im gleichen Pfad wie die Exe liegt.
    DLL := PChar(Path);
    DLLHandle := LoadLibrary(DLL);
    checkptr:= GetProcAddress(DLLHandle,'CHECK_DB_CONNECTION');
    @DLLCheck:= CheckPtr;
    j:=dllcheck;
    if j=0 then statusbar1.panels[0].Text:=inttostr(j)+' Datenbank Verbindung OK';
    if j=-1000 then statusbar1.panels[0].Text:=inttostr(j)+' Fehler: keine Verbindung zur DB';
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: OLE. DLL Zugriff. XE2

  Alt 12. Nov 2014, 16:17
Versuch mal

Delphi-Quellcode:
// DLL := PChar(Path);
strPCopy(DLL,Path);
EDIT: Aber ich denke das hilft nix. Wenn dein DLLHandle sowieso schon gültig war, ausser du hast das nie geprüft.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)

Geändert von baumina (12. Nov 2014 um 16:22 Uhr)
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
471 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: OLE. DLL Zugriff. XE2

  Alt 12. Nov 2014, 16:38
Also wenn ich
strPCopy(DLL,Path);
einsetze, krachts und es kommt zu einer Zugriffsverletzung.


Delphi-Quellcode:
 TCheck_DB_Connection = Function:integer;stdcall;
....
    DLLGET_Batch_INFOS_XML :TGET_BATCH_INFOS_XML;
    DLLCheck :TCheck_DB_Connection;
    DLLHandle :THandle;
    DLL :Pchar;
dürfte auch passen? Oder muss ich das anders deklarieren.
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
471 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

AW: OLE. DLL Zugriff. XE2

  Alt 12. Nov 2014, 17:14
2.1 Funktionsprototyp / Parameter
Die meisten Funktionen haben folgenden Aufbau:
function FunktionsName_XML (pIn:pchar;pOut:pchar;size:integer):integer;export ;stdcall;
Parameter: pIn Struktur für Eingabeparameter
pOut Puffer für die Struktur der Ausgabeparameter
size Größe des Ausgabepuffers pOut in Byte
Parameterstruktur:
Die In,-Out-Parametern werden in einer XML Struktur übergeben
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: OLE. DLL Zugriff. XE2

  Alt 12. Nov 2014, 17:19
Dann Ändere hier PChar nach PAnsiChar. Die Dll wird kein Unicode verstehen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#8

AW: OLE. DLL Zugriff. XE2

  Alt 12. Nov 2014, 17:41
In diesem Beispiel wird aber nirgendwo PChar verwendet. (jedenfalls nicht für die gezeigten Schnittstellen zur DLL -> DLLCheck/CHECK_DB_CONNECTION hat weder entsprechenden Parameter noch Result)

Der Code aus #1 einfach nur etwas gekürzt.
Delphi-Quellcode:
DLLHandle := LoadLibrary('mes_toolbox.dll'); // Windows sucht sowieso zuerst im Programmverzeichnis
DLLCheck := GetProcAddress(DLLHandle, 'CHECK_DB_CONNECTION'); // siehe (1)
Assert(Assigned(DLLCheck));
j := DLLCheck;
if j = 0 then StatusBar1.Panels[0].Text := IntToStr(j) + ' Datenbank Verbindung OK';
if j = -1000 then StatusBar1.Panels[0].Text := IntToStr(j) + ' Fehler: keine Verbindung zur DB';
1) Links vom := baut Delphi implizit ein @ ein.
Bzw. ist es hier eigentlich andersrum, denn Delphi baut bei Prozedurzeigern implizit immer ein ^ (Dereferenzierung) ein und lässt es bei einer Zuweisung implizit weg, außer man macht ein explizites @ davor.

Die Funktionen LoadLibrary und GetProcAddress werden nicht in der DLL ausgeführt.
Das Einzige, wo es hier Probleme geben könnte, wenn "Path" kein String, sondern z.B. ein AnsiString ist. (ab Delphi 2009)


Nutzt die DLL sowas wie ShareMem?
Oder gibt es noch weitere exportierte Funktionen, wo es knallt?
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (13. Nov 2014 um 08:41 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: OLE. DLL Zugriff. XE2

  Alt 12. Nov 2014, 17:46
Wie ist die Funktion CHECK_DB_CONNECTION deklariert?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#10

AW: OLE. DLL Zugriff. XE2

  Alt 13. Nov 2014, 08:42
Die Antwort wurde heimlich in #5 versteckt.
 TCheck_DB_Connection = Function:integer;stdcall;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 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