AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Gibt es sowas auch für den Delphi-Compiler?
Thema durchsuchen
Ansicht
Themen-Optionen

Gibt es sowas auch für den Delphi-Compiler?

Ein Thema von Luckie · begonnen am 31. Dez 2002 · letzter Beitrag vom 14. Jan 2003
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Gibt es sowas auch für den Delphi-Compiler?

  Alt 31. Dez 2002, 01:10
Code:
#pragma (data_seg("Sahred")
HHOOK g_hHook = NULL;
DWORD g_dwThreadIDDips = 0;
#pragma data_seg()
// Den Linker anweisen, den Abschnitt Shared lesbar
// und beschreibbar zu machen
#pragma comment(linker, /"section:Shared,rws")
Das weißt den VC-Compiler an Die angegeben Variablen in einem eigenen Abschnitt names "Sahred" unterzubrigen. Dann dem Linker mitteilen, dass die Dten in diesem Anbschnitt von allen Instanzen dieser Anwendung gemeinsam verwendet werden sollen.

@Christina Seehase: Du hast ja auch den Richter. Ich versuche gerade die Anwendung DIPS in Delphi zu schreiben. Aber ich bekomme immer eine Acces-Violation. Wenn du dir das mal ankucken könntest. Ich finde den Fehler einfach nicht.
Angehängte Dateien
Dateityp: zip DIPS.zip (395,9 KB, 8x aufgerufen)
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 31. Dez 2002, 02:02
Moin Luckie,

bei mir fliegt er immer bei DipsSet(0) auf die Nase.
Und soweit ich das sehe entspricht auch die Übersetzung der SetDipsHook Funktion in der DLL der Vorgabe (abgesehen vom ShowMessage)

Tritt der Fehler auch auf, wenn ShowMessage weggelassen wird?

Was ich übrigens grundsätzlich anders mache bei der Deklaration solcher Funktionen (z.B. auch API Übersetzungen):

Bei mir werden sämtliche Parameter als const deklariert.
I.d.R. wird bei den Funktionen ja entweder der Wert der übergeben wurde direkt benutzt (z.B. Typ DWORD), oder es ist ein Pointer auf einen Speicherbereich (z.B. PDWORD).
Eventuell klappt da was nicht mit der Art, wie Delphi die Parameter ohne const übergibt?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3
  Alt 31. Dez 2002, 07:14
Ja, bei mir auch. Aber "auf die Nase fliegen" ist manchmal noch etwas untertrieben. Ich habe da bisher noch keine Lösung gefunden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4
  Alt 31. Dez 2002, 09:28
Anscheinend brauch man das nicht. Also die Einstellung für das VC für die DLL.

Zur Erklärung: Ich will die Positionen der Icons auf dem Desktop sichern. dazu muß ich eine DLL in den Adressraum des Explorers injezieren, der für den Desktop verantwortlich ist. das ist nicht ganz einfach - eben eine Herausforderung.

Aber wenn sich auch noch mal anderen dem Problem annehmen könnte: Die DLL verursacht immer eine schöne Access-Violation. Und ich konnte bisher noch nicht rausfinden warum. Aber Achtung, der Fehler kann eur ganzes System zerschießen. Unter Win2000 reicht aber ein Ab- und wieder Anmelden, dann kann man weiterarbeiten. Es kann euch deswegen das ganze System zerschießen, weil ich die DLL per Hook in den Explorer-Prozess injeziere, der für den Desktop verantwortlich ist. Ich denke, wenn das Problem mit der Access-Violation gelöst ist, dann ist der Rest meines Vorhabens nur noch ein Klacks.

Nachtrag: Die DLL muß sich dann im Windows-System-ordner befinden.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5
  Alt 31. Dez 2002, 10:19
Was mit aufgefallen ist:
g_dwThreadIDDips := GetCurrentThreadID(); Läuft ja noch in deinem Programm ab. Wenn du nun aber in GetMsgProc auf g_dwThreadIDDips zugreifst, dann enthält diese Variable nicht den zuvor zugewiesenen Inhalt, da sie nicht in einem shared Datensegment liegt. (Solche Datensegmente lassen sich mit Delphi nicht erzeugen)
Eine Möglichkeit wäre die Verwendung von MMF, die z.B. im Pagefile (Swap-Datei) liegen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6
  Alt 31. Dez 2002, 10:24
Deswegen wohl auch die Compiler- und Linker-Schalter im VC. Aber es muß gehen. Nico hat es auch geschaft ohne MMF.

Hier noch mal die Erklärung, was das eigentlich soll: Link ins Spotlight
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#7
  Alt 14. Jan 2003, 13:48
Ein shared segment laesst sich mit Delphi nicht erstellen.
Auf der Borland Community gibt es aber ein Tool von Petr Vones mit der man ein shared segment an eine DLL antackern kann. Es wird eine globale Variable der Delphi DLL umgewandelt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8
  Alt 14. Jan 2003, 13:56
Danke, werde mich mal da informieren. Einen direkten Link hast du nicht zufällig parat oder einen Link in die Nähe oder so?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#9
  Alt 14. Jan 2003, 14:44
Wer suchet, der findet.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10
  Alt 14. Jan 2003, 14:52
Spitze, danke.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 12:28 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