AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

C Codeschnipsel nach Delphi

Ein Thema von Jelly · begonnen am 12. Apr 2005 · letzter Beitrag vom 12. Apr 2005
Antwort Antwort
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#1

C Codeschnipsel nach Delphi

  Alt 12. Apr 2005, 11:47
Ich hab leider nicht den Durchblick in C, muss aber folgenden Code nach Delphi transferieren... Kann mir da einer bischen helfen, zumindest die Grundzüge.

Ich blick einfach nicht was das mit den Sternchen auf sich hat.
Code:
#include <windows.h>

typedef struct _AdvancedDllStruct

   int (WINAPI *AddedFile)(char *lpFileName);
   int (WINAPI *AddedKey)(HKEY hKeyRoot,char *lpPath);
   int (WINAPI *AddedValue)(HKEY hKeyRoot,char *lpPath,char *lpValueName);
   int (WINAPI *AddShared)(char *lpSharedFile);
   int (WINAPI *BackupFile)(char *lpFileName);
   int (WINAPI *CreateDirectory)(char *lpDirectory);
   char * lpCommandLine;
   HBITMAP hbmDialog;
   BOOL bSilent;
   DWORD *lpdwFlags;
   char *(WINAPI *GetVariableString)(char *lpVariable);
   int (WINAPI *GetVariableInt)(char *lpVariable);
   int (WINAPI *SetVariableString)(char *lpVariable,char *lpValue);
   int (WINAPI *SetVariableInt)(char *lpVariable,int iValue);
} AdvancedDllStruct;

AdvancedDllStruct *g_pADS = NULL;

long WINAPI AdvancedEntry(AdvancedDllStruct *lpAdvancedDllStruct)

   g_pADS = lpAdvancedDllStruct;
   return 1;


long WINAPI OnMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, long lDialogId)

  if (lDialogId == 7 && uMsg == WM_COMMAND && HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDOK)
  { 
    char szParentDirectory[MAX_PATH] = {0};
    GetDlgItemText(hWnd, 10, szParentDirectory, MAX_PATH);
    if (strchr(szParentDirectory, '\\') != strrchr(szParentDirectory, '\\') && szParentDirectory[strlen(szParentDirectory) - 1] == '\\')
        szParentDirectory[strlen(szParentDirectory) - 1] = 0;
    if (strrchr(szParentDirectory, '\\') != NULL)
      *strrchr(szParentDirectory, '\\') = 0;
    g_pADS->SetVariableString("<InstallDirParent>", szParentDirectory);
  } 

  return 0;
}
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: C Codeschnipsel nach Delphi

  Alt 12. Apr 2005, 12:14
Das ist Teil einer groesseren Infrastruktur (MFC) und laesst sich daher nicht sinnvoll konvertieren.
Die Source selbst laesst sich problemlos konvertieren, aber ob man sich wirklich mit Delphi-Code in die MFC einklinken sollte?

OnMessage ist offensichtlich der OnClick-Event des OK-Buttons eines Dialogs.
Es wird offensichtlich der Pfad einer Directory ausgelesen (Editfeld oder aehnlich).
Der Pfad wird noch ein bischen nachbearbeitet und dann die Funktion (genauer Funktionszeiger) SetVariableString aufgerufen,
die Teil der globalen Zeigervariable g_pADS ist. g_pADS ist ein Zeiger auf ein Record.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#3

Re: C Codeschnipsel nach Delphi

  Alt 12. Apr 2005, 12:20
Heisst das im Klartext, es ist sinnvoller, das Ganze in C zu belassen?
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#4

Re: C Codeschnipsel nach Delphi

  Alt 12. Apr 2005, 12:36
Entweder man laesst es in C oder konvertiert nicht, sondern programmiert das Programm mit der VCL nach.

AdvancedDllStruct ist ein Record mit Zeigern auf Funktionen (und ein paar anderen Elementen) drin.
In Delphi ist das ein Funktionstyp.

Mit der Funktion AdvancedEntry uebergibt man einen Zeiger auf ein ausgefuelltes Record das in einer globalen Variablen gemerkt wird und dann verwendet wird.
Das ist eine einfache Plugin-Architektur.

Wenn es darum geht, nur so ein Record zu erstellen, damit man es mit AdvancedEntry registrieren kann, so ist das durchaus moeglich.

Delphi-Quellcode:
type
  PAdvancedDllStruct = ^AdvancedDllStruct;
  AdvancedDllStruct = packed record
    AddedFile: function(lpFileName: PChar): Integer; stdcall;
    AddedKey: function(kKeyRoot: HKEY; lpPath: PChar): Integer; stdcall;
    AddedValue: function(kKeyRoot: HKEY; lpPath: PChar; lpValueName: PChar): Integer; stdcall;
    AddShared: function(lpSharedFile: PChar): Integer; stdcall;
    BackupFile: function(lpFileName: PChar): Integer; stdcall;
    CreateDirectory: function(lpDirectory: PChar): Integer; stdcall;
    lpCommandLine: PChar;
    hbmDialog: HBITMAP;
    bSilent: LongBool;
    lpdwFlags: PDWORD;
    GetVariableString: function(lpVariable: PChar): PChar; stdcall;
    GetVariableInt: function(lpVariable: PChar): Integer; stdcall;
    SetVariableString: function(lpVariable: PChar; lpValue: PChar): Integer; stdcall;
    SetVariableInt: function(lpVariable: PChar; iValue: Integer): Integer; stdcall;
  end;
Hier eingehackt, also ohne Garantie.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#5

Re: C Codeschnipsel nach Delphi

  Alt 12. Apr 2005, 14:37
Danke Robert... Ich werd mal heut abend, wenn ich noch dazu komm, damit rumprobieren.

Zum Hintergrund. Es geht um das Erstellen einer DLL für ein Setupprogramm, welches dort als Plugin aufgenommen werden kann. Die DLL muss dabei natürlich gewissen Anforderungen gerecht werden, damit es eingebunden werden kann.
  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 21:07 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