Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Fehler in Record-Ausrichtung bei Übergabe an Visual C DLL (https://www.delphipraxis.net/1917-fehler-record-ausrichtung-bei-uebergabe-visual-c-dll.html)

jbg 1. Jan 2003 18:19

Den C Beispiel-Code (zumindest das Interessante) könntest du doch mal posten. Deine Delphi deklaration sowie die Einbindung der Funktion (function ... external 'dllname.dll') wäre auch nicht schlecht. Dann würde diese Diskussion nicht nur auf theoretischer Basis ablaufen.

oki 1. Jan 2003 20:00

Erst mal an alle die mir bei meinem blöden Problem helfen Dank!!!! :oops: :oops:

Ich habe jbg gerade den Code in das private Postfach gestellt. Da die DLL's lizensrechtlich geschützt sind möchte ich das Ganze nicht so doll öffentlich machen. Sorry :oops: :oops: !!

Wer mir sonst noch weiter helfen kann soll sich melden. Ich sende dann den Code auch dort hin.

So, dann Dank, Dank, Dank bis hierhin

Gruß Olaf

jbg 1. Jan 2003 21:28

Zitat:

Zitat von oki
Ich habe jbg gerade den Code in das private Postfach gestellt.

Da kam nichts an.
Ich wollte auch nicht, dass du gleich die ganze DLL schickst, sondern aus dem C Beispiel nur die Deklaration der Struktur und den Aufruf sowie die Dekl. der Funktion. Dasselbe auch von deinem Delphi Beispiel.

jbg 2. Jan 2003 15:07

Ich habe den Fehler gefunden. Und zwar liegt es an der Übersetzung des Typs BOOL nach Boolean. Der BOOL Typ ist als int deklariert und somit 32 Bit groß. Die Entsprechung in Delphi ist LongBool (32 Bit) und nicht Boolean (8 Bit). Also einfach in der Datei MapDefs.pas ein Suchen/Ersetzen machen: Boolean -> LongBool

oki 2. Jan 2003 18:20

Hallo jbp,

wenn das stimmt gebe ich einen aus. Ich prüf das gleich.

Gruß Olaf

oki 2. Jan 2003 18:32

Hallo jbp,

ähhhm, nach dem Motto suche einen Fehler und du findest 10. Ich habe Deinen Vorschlag gerade umgesetzt. Das hat meinen Fehler aber leider nicht beseitigt.

Sag mal kurz bescheid ob du das Projekt mal ausprobiert hast und mit welcher Delphi-Version.

Gruß Olaf

jbg 2. Jan 2003 21:28

Ausprobiert habe ich es unter Delphi 6 Pro und WinXP Pro. Das Programm läuft soweit, dass es ohne dass ein Button gedrückt wird, ohne Fehler startet. Also den wahren Fehler habe ich noch nicht gefunden. Aber so weit wie ich gerade bin, liegt es nicht an der Ausrichtung der Felder, denn die ist auch bei C++ trotz ALIGN:8 nicht anders als die von Delphi.

oki 3. Jan 2003 08:39

Hallo jbg,

herzlichen Dank für Deinen Code zu meinem Problem. Ich habe diesen mal ausprobiert. Dazu mußte ich aber die Direktive {$Align 8} auskommentieren da D5 diese nicht kennt. Das Setzen der Objecte klappt anstandslos. Beim Verbinden bekomme ich den Fehler Lesen von Adresse $FFFFFFFF.
Da Du auch diese Methode verändert hast gehe ich davon aus, dass sie bei Dir läuft.
Ich bin jetzt immer mehr davon überzeugt, dass ich auf mind. D6 updaten muß um die Sache in den Griff zu bekommen.

Meine getesteten BS sind übriegens Win98 und 2000. Bei beiden mein Fehler.

Gruß Olaf

jbg 3. Jan 2003 19:04

Ich habe die beiden Buttons natürlich einzeln getestet. Da kommt kein Fehler. Du musst folgendes einfügen, damit es ohne AV funktioniert.
Delphi-Quellcode:
procedure TForm1.MakeCon(Anzahl: Integer);
...
begin
  Viewer := MapForm.Viewer;
  if Anzahl < 2 then Exit;

  // alle bestehenden Temp. Objecte entfernen
  Viewer.RemoveAllTempObjects;  <----
  Viewer.RemoveAllConnections;  <----
[/quote]

oki 3. Jan 2003 20:46

Hallo jbg,

ich hab die ganze Zeit gegrübelt was Du mir beibringen willst. Da ich Dir die Doku zur DLL nicht mit zugestellt habe reden wir beide wahrscheinlich gerade aneinander vorbei. Mit der Methode MakeCon werden Verbindungslinien zwischen temp. Objekten gezogen. Sind diese nicht vorhanden, so wird keine Linie gezeichnet.

Mein Testbeispiel ist hier natürlich nicht sehr plausibel. Du mußt zuerst eine Anzahl von Objekten setzen und kannst diese dann mittels MultitempConnect verbinden. Die Elemente gelten wie folgt:
Delphi-Quellcode:
  TMultiTempConnect = record
    mtc_startid : UINT;              // Ausgangsobjekt der Linie
    mtc_connection : TTempConnect;   // Struktur mit Zielobjekt und                                            
                                      // Verbindungsattributen
Die ID wird beim Setzen der Objekte (SetTemoObjectExt) festgelegt. Im Normalfall sollte sie eindeutig sein (beim Test erst mal vernachlässigt, ist hierfür alles nicht so wichtig; wird dann alles in meiner eigentlichen Applikation berücksichtigt).

Also, der Normalablauf ist so:

- Setzen einer Anzahl von Objekten mittels SetTempObjectExt,
- Verbinden der Objekte mittels AddMultiConnections
- neu zeichnen der Karte mittels Redraw zur Anzeige der Verbindungslinien.

Dann auf ein Neues.

Gruß Olaf


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:51 Uhr.
Seite 2 von 3     12 3      

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-2025 by Thomas Breitkreuz