Autor Beitrag
matthew77
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 10.04.17 15:44 
Hallo,
mir ist klar, dass es ein Wunder wäre, wenn mir hiermit jemand helfen kann, aber in meiner Not versuche ich ALLES um es vielleicht doch noch hinzukriegen.
Also: ich stehe vor folgendem Problem: meine Software verwendet eine Bibliothek die das COM Interface unterstützt, aber leider NUR die 32-bit Version. Unsere Software sollte aber - da sie bei bestimmten Anwendungen VIEL Hauptspeicher benötigt - für 64-bit kompiliert werden. Ich habe einen interessanten Work-Around im Netz gefunden, der sogar teilweise funktioniert:
techtalk.gfi.com/32b...t-64bit-environment/
Mit diesem Registry-Hack konnte ich erfolgreich eine alte 32-bit Barcodelibrary in ein 64-bit Delphiprogramm integrieren.
Übrigens habe ich mir dafür ein kleines Hilfsprogramm geschrieben, da das Anlegen der Registry-Keys sehr nervig sein kann, insbesondere wenn die Library aus mehreren Elementen mit eigenen GUIDs besteht. Außerdem muss ich zu der Anleitung ergänzend sagen, dass die GUIDs offenbar nicht immer nur in CLSID stehen sondern auch in TypeLib und Interface.
Ermutigt von dem erfoglreichen Test wollte ich die andere Bibliothek (es handelt sich dabei um die Bildverarbeitungsbibliothek "Halcon 13" von der Firma MVTec) ebenfalls einbinden. Dazu habe ich ein Beispielprogramm geladen, was unter 32-bit fehlerfrei läuft. Unter 64-bit kam bisher schon beim Versuch zu kompilieren eine Fehlermeldung (irgendwas mit Mismatch x86 und x64). Nach dem Registry-Hack kompiliert er klaglos. Ich bekomme jedoch sehr bald eine Exception:
---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt matching.exe ist eine Exception der Klasse EOleError mit der Meldung 'Das Fenster-Handle des OLE-Elements nicht verfügbar' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------

und danach folgende:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt matching.exe ist eine Exception der Klasse EOleException mit der Meldung 'Ausnahmefehler des Servers' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------


Leider kann ich die erste Exception nicht wirklich lokalisieren. Sie tritt beim Verlassen von "FormCreate" auf,und zwar wohl irgendwo in c:\Windows\system32\Kernelbase.dll

die zweite folgt nach Ausführen der Codezeile:
Img.Dispobj(Window);

Hat hier irgendjemand vielleicht schon ähnliches Probiert und ist auf die gleichen Fehler gestoßen? Gibt es die Chance für ein Workaround. Alles Beknien der Entwickler für eine 64-bit Version der COM Bibliothek hat bisher leider nichts gebracht...
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 10.04.17 15:51 
Moin!

Wenn es "um jeden Preis" eine Lösung geben muss: schreib einen 32-bit Wrapper (Dienst?), der die API kapselt und stelle diese dann für einen 64-bit-Prozess per IPC bereit. :idea: :nixweiss: Ist zwar irgendwie doof und doppelt, geht aber (und zwar immer und überall). ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.

Für diesen Beitrag haben gedankt: matthew77
matthew77 Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 10.04.17 16:17 
Hallo Narses und danke für die schnelle Antwort.
Hab sowas auch schon gelesen, und zwar hier:
blog.mattmags.com/20...ls-from-64-bit-code/
Allerdings ist das für mich leichter gesagt als getan. Die Sache ist wohl doch komplizierter als ich zu hoffen wagte. Vor allem frage ich mich, wie das mit dem Wrapper gehen soll, wenn ich da solche Grafikausgaben machen will und so etwas. Ich bin leider nicht so ein "Profi" wie einige hier im Forum.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 10.04.17 18:09 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: matthew77
matthew77 Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 10.04.17 18:17 
Also erstmal vielen Dank für das Angebot! Ist aber hoffentlich nicht mehr nötig, denn auf wundersame Weise hat es jetzt funktioniert. Was ich gemacht habe: ich habe noch mal explizit die x64 Version installiert (die angeblich keine COM Unterstützung hat!) und siehe da: meine Testanwendung funktioniert fehlerfrei!! Keine Ahnung wie das jetzt funktionieren kann aber ich bin happy as can be!!
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 10.04.17 18:25 
- Nachträglich durch die Entwickler-Ecke gelöscht -