![]() |
OLE. DLL Zugriff. XE2
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 |
AW: OLE. DLL Zugriff. XE2
Das ist sicherlich ein UniCode-Problem. Achte auf PChar -> PAnsiChar usw.
|
AW: OLE. DLL Zugriff. XE2
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'; |
AW: OLE. DLL Zugriff. XE2
Versuch mal
Delphi-Quellcode:
EDIT: Aber ich denke das hilft nix. Wenn dein DLLHandle sowieso schon gültig war, ausser du hast das nie geprüft.
// DLL := PChar(Path);
strPCopy(DLL,Path); |
AW: OLE. DLL Zugriff. XE2
Also wenn ich
strPCopy(DLL,Path); einsetze, krachts und es kommt zu einer Zugriffsverletzung.
Delphi-Quellcode:
dürfte auch passen? Oder muss ich das anders deklarieren.
TCheck_DB_Connection = Function:integer;stdcall;
.... DLLGET_Batch_INFOS_XML :TGET_BATCH_INFOS_XML; DLLCheck :TCheck_DB_Connection; DLLHandle :THandle; DLL :Pchar; |
AW: OLE. DLL Zugriff. XE2
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 |
AW: OLE. DLL Zugriff. XE2
Dann Ändere hier PChar nach PAnsiChar. Die Dll wird kein Unicode verstehen
|
AW: OLE. DLL Zugriff. XE2
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:
1) Links vom
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';
Delphi-Quellcode:
baut Delphi implizit ein
:=
Delphi-Quellcode:
ein.
@
Bzw. ist es hier eigentlich andersrum, denn Delphi baut bei Prozedurzeigern implizit immer ein
Delphi-Quellcode:
(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? |
AW: OLE. DLL Zugriff. XE2
Wie ist die Funktion CHECK_DB_CONNECTION deklariert?
|
AW: OLE. DLL Zugriff. XE2
Die Antwort wurde heimlich in #5 versteckt.
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:01 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