OpenCascade
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
ich versuche gerade OpenCascade von Delphi aus anzusprechen. Bisher gelingt es mir die OCC Quellen mit VS-2015 zu übersetzen, und eine eigene Wrapper.dll zu erzeugen. Die Wrapper.dll besitzt bislang nur zwei C Funktionen zum erzeugen und löschen eines C++ Objekts (WNT_Window). Wenn ich die Wrapper.dll in einem Delphi aufrufe egal ob dynamisch oder statisch gebunden erscheint die Meldung -------------------------------- Debug Assertion Failed! Programm: X:\<Pfad ...>\OCC_Test.exe File: minkernel\crts\ucrt\scr\appcrt\lowio\lseek.cpp Line: 74 Expression: ("Invalid file descriptor",0) For information on how your program can cause an assertion failure, see the Visual C++ documentation on asserts. ---------------------------------- Nachdem diese Meldung vier mal mit der Taste "Ignorieren" bestätigt wurde startet das Programm ganz normal. Meine beiden Funktionen können dann auch aufgerufen werden. In VS-2015 Aufgerufen ergibt sich die unten beigefügte Aufrufliste. Hat jemand einen Tipp für mich wie ich da weiter kommen kann? |
AW: OpenCascade
Gibt es nicht fertige Dlls?!
Gibt es hier nicht welche? Der Autor hat anscheinend auch ein Wrapper für Python erstellt. |
AW: OpenCascade
Ich würde sagen Du versuchst irgendwo auf die console zu schreiben.
Sind da debugprints oder so etwas in Deiner Source? Wir haben hier eine Wrapper Dll zu Opencascade die auch mit VC2015 compiliert ist. Läuft ohne Probleme |
AW: OpenCascade
In meiner Source ist nur die zwei Funktionen um mal Testweise ein C++ Objekt zu erzeugen und wieder zu löschen. Wenn dann sind die debugprints in den Original Quellen.
Laut Aufrufliste sind noch nicht einmal OCC DLLs involviert (sofern ich das richtig interpretiere). Gibt es denn einen Schalter um debugprints zu deaktivieren? Habt ihr eure Wrapper DLL selber erzeugt? die tpaviot Quellen auf die Jens01 verweist werde ich mir mal genauer anschauen. Vielen dank für den Tipp. |
AW: OpenCascade
Ja wir haben die Dll selber gemacht. Ist aber sehr speziell an unsere Bedürfnisse angepasst.
Aber um bei Deinem Problem zu bleiben, nur mit der Grafik vom Stacktrace is das schwer zu sagen. Warum versuchst Du nicht einfach mal die Dll im Debugger laufen zu lassen? |
AW: OpenCascade
Debuggen habe ich nun endlich hinbekommen.
In "UnitsAPI.cxx" werden vier Parameter gesetzt.
Code:
Jede Zeile verursacht jeweils die beschriebene nichtssagende Fehlermeldung.
static OSD_Environment env1("CSF_UnitsLexicon");
static OSD_Environment env2("CSF_UnitsDefinition"); #ifdef _WIN32 static OSD_Environment env3("CSF_CurrentUnits"); static OSD_Environment env4("CSF_MDTVCurrentUnits"); OSD_Environment ist ein Object mit folgenden Feldern:
Code:
Der Constructor weist myName zu.
...
private: TCollection_AsciiString myName; TCollection_AsciiString myValue; OSD_Error myError; Dabei wird wohl Speicher reserviert die Textlänge hinterlegt und der übergebene Parameter in den reservierten Speicher kopiert. Möglicherweise stimmt etwas mit der Speicherverwaltung nicht. Hat jemand eine Idee wie ich da weiterkommen kann? Gibt es in Delphi Stellschrauben die ich verwenden könnte irgend eine Konfiguration oder einbinden einer spezieller Unit(Speichermanager)? |
AW: OpenCascade
wenn Du magst häng doch mal dein c++ Source hier an dann schaue ich rein. so bringt das nichts
|
AW: OpenCascade
vielen Dank schon mal im voraus.
was meinen eigenen C/C++ Code anbelangt habe ich zunächst ein Win32 Projekt mit Anwendungstyp DLL erstellt. Die dabei erstellten Dateien dllmain.cpp stdafx.cpp stdafx.h targetver.h sind unverändert. zusätzlich erstellte ich die Datei "C_WNT_Window.cpp" mit folgendem Inhalt:
Code:
Damit wollte ich testen ob es mir überhaupt gelingt ein C++ Object
#include "stdafx.h"
#include <WNT_Window.hxx> #define EXPORTCALL __declspec(dllexport) typedef WNT_Window *WNT_WindowHandle; extern "C" { WNT_WindowHandle EXPORTCALL NewWNT_Window( const Aspect_Handle aHandle, const Quantity_NameOfColor aBackColor = Quantity_NOC_MATRAGRAY) { WNT_WindowHandle handle = new WNT_Window(aHandle, aBackColor); return handle; } void EXPORTCALL DeleteWNT_Window(WNT_WindowHandle handle) { handle->Unmap(); delete handle; } }// extern "C" aus Delphi heraus zu verwenden. Die Fehler ereignen sich aber bereits bei der Initialisierung der OCC DLLs. Obiger Code ist da noch nicht involviert. auf der Delphi Seite binde ich die DLL Dynamisch ein
Code:
unit OCCWrapper;
interface uses WinApi.Windows; const LibName = 'OCCWrapper.dll'; var OCCLibHnd: THandle; implementation initialization OCCLibHnd := LoadLibrary(LibName); finalization FreeLibrary(OCCLibHnd); OCCLibHnd := 0; end. Möglicherweise genügt es nicht, nur #include <WNT_Window.hxx> einzubinden? |
AW: OpenCascade
Hallo also mit dem include von
Delphi-Quellcode:
#include <WNT_Window.hxx>
bindest Du quasi das ganze OCC mit ein. das ist zum testen wohl kaum optimal. Auch das mischen von c++ Windows und Delphi Forms würde ich lassen.... Damit fällst Du 100% auf die Nase. Opencascade ist auch mehr eine Geometrie Library als ein Viewer. Mit den reinen Geometrie Klassen klappt das super. Was willst Du eigentlich genau machen? |
AW: OpenCascade
Zitat:
Wobei laut Stacktrace diese Meldungen aus TKernel.dll heraus aufgerufen werden, Und TKernel.dll werde ich wahrscheinlich immer benötigen. Habt ihr denn eine Konsole mit laufen auf der Ausgaben stattfinden? Eine Vermutung ist dass OCC bei der Initialisierung etwas ausgeben möchte dies aber nicht kann weil ein wie auch immer gearteter Ausgabekanal nicht eingerichtet ist. Nur so Interesse halber, für was setzt ihr den OCC ein? Ich für meinen Teil entwickle für einen Behälterbauer einen Produktkonfigurator auf der Basis eines regelbasierten Expertensystems. Damit kann man automatisch sehr nützliche Dinge erstellen Arbeitspläne, Stücklisten, Maschinenansteuerungen, 2D Zeichnung ... Nun möchte ich prüfen ob auch 3D möglich ist. Die Geometriedaten könnten automatisch erstellt werden. Die Anzeige der Daten wäre natürlich ganz nett, und das Speichern in einem gängigen CAD Format auch. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:55 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