AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Übergabe eines CStrings in Delphi an eine DLL-Funktion
Thema durchsuchen
Ansicht
Themen-Optionen

Übergabe eines CStrings in Delphi an eine DLL-Funktion

Ein Thema von DXler · begonnen am 7. Okt 2004 · letzter Beitrag vom 29. Nov 2011
Antwort Antwort
Benutzerbild von DXler
DXler

Registriert seit: 5. Nov 2003
53 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Übergabe eines CStrings in Delphi an eine DLL-Funktion

  Alt 7. Okt 2004, 00:00
Folgendes Problem:

Ich habe mich mit jemanden zusammengeschlossen und wir haben vor für die DVBs-Karte Nexus, die von TechnoTrend / Hauppauge hergestellt wird, ein Programm zu schreiben mit dem man TV gucken kann.

TechnoTrend hat hierfür ein SDK herausgebracht. Allerdings ist dies in C++ und wir wollen das in Delphi umsetzen.

Die Karte zu initialisieren haben wir bereits geschafft. Als nächster Schritt muß jetzt allerdings die Firmware der Karte geladen werden. Dies geschieht über eine Funktion die in einer DLL integriert ist (wie alle weiteren Funktionen auch). Um auf die Funktionen zuzugreifen, müssen die Funktionen in einer Klasse eingebettet sein (was kein Problem ist).

Hier ist nun die entsprechende C++-Funktion die die Firmware auf die Karte überträgt (der genaue Funktionsname ist geändert, damit wir nicht gegen die Lizenzbestimmung von TechnoTrend verstoßen):

Code:
DVB_ERROR xyz(CString* path);
"CString" ist in unseren Augen der Typ, der an die Routine übergeben werden muß. "path" ist die Variable die den Pfad zur Firmware enthält.


Im Beispiel, das dem SDK beiliegt, sieht der Aufruf wie folgt aus (Funktionsname: siehe weiter oben):

Code:
   CString sPath,s2,s3;
   GetExePath(sPath,s2,s3);
   sPath += CString("Boot\\") + "24" + CString("\\") ;

   error = abc.xyz(&sPath);
"abc" steht für die Klasse und "xyz" ist die Funktion.

Unsere Frage: wie sieht der 2. Teil entsprechend in Delphi aus?


Das Erstellen der Klasse für den Funktionsaufruf ist bereits erledigt und funktioniert.

Wir haben schon einige Variationen mit PChar probiert. Diese enden allerdings in einer "Access Violation" die sich (komischerweise?) auf die "MFC42.dll" bezieht.
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Übergabe eines CStrings in Delphi an eine DLL-Funktion

  Alt 7. Okt 2004, 02:48
ist wohl was erweitertes als ein string.. sowas wie ein objekt.. also ne intelligenter string

http://msdn.microsoft.com/library/de...ngs_topics.asp
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#3

Re: Übergabe eines CStrings in Delphi an eine DLL-Funktion

  Alt 7. Okt 2004, 06:35
Zitat von DXler:
Die Karte zu initialisieren haben wir bereits geschafft. Als nächster Schritt muß jetzt allerdings die Firmware der Karte geladen werden. Dies geschieht über eine Funktion die in einer DLL integriert ist (wie alle weiteren Funktionen auch). Um auf die Funktionen zuzugreifen, müssen die Funktionen in einer Klasse eingebettet sein (was kein Problem ist).
Wie denn das?

Zitat von DXler:
Hier ist nun die entsprechende C++-Funktion die die Firmware auf die Karte überträgt (der genaue Funktionsname ist geändert, damit wir nicht gegen die Lizenzbestimmung von TechnoTrend verstoßen):
Was sind denn das fuer Idioten (sowohl in Lizenz als auch in API)?
Habt ihr ein NDA unterschrieben?

Zitat von DXler:
Code:
DVB_ERROR xyz(CString* path);
"CString" ist in unseren Augen der Typ, der an die Routine übergeben werden muß. "path" ist die Variable die den Pfad zur Firmware enthält.
Das wird problematisch. CString ist eine C++ Klasse und sollte sich in Delphi nicht nachbauen lassen.
  Mit Zitat antworten Zitat
boonkerz

Registriert seit: 6. Okt 2004
1 Beiträge
 
#4

Re: Übergabe eines CStrings in Delphi an eine DLL-Funktion

  Alt 7. Okt 2004, 08:39
Hallo

Ich bin der zweite Mitspieler

Mhm deswegen haben andere Software auch einen Wrapper in c++ geschrieben.

Gibts wirklich keine Möglichkeit?

MFG
  Mit Zitat antworten Zitat
Benutzerbild von DXler
DXler

Registriert seit: 5. Nov 2003
53 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: Übergabe eines CStrings in Delphi an eine DLL-Funktion

  Alt 7. Okt 2004, 11:33
Zitat:
Zitat von DXler:
Die Karte zu initialisieren haben wir bereits geschafft. Als nächster Schritt muß jetzt allerdings die Firmware der Karte geladen werden. Dies geschieht über eine Funktion die in einer DLL integriert ist (wie alle weiteren Funktionen auch). Um auf die Funktionen zuzugreifen, müssen die Funktionen in einer Klasse eingebettet sein (was kein Problem ist).
Wie denn das?
Also: zuerst ruft man eine Funktion auf die dafür sorgt, das die DLL initialisiert wird. Wenn das geschehen ist, kann man auf die einzelnen Funktionen zugreifen.


Zugriff auf die Funktionen der DLL:

Die Funktionen der DLL sind in einzelne Bereiche aufgeteilt. Da gibt es z. B. einen Bereich der sich allgemein mit dem Board befasst. Ein weiterer ist für den Frontend (Betriebssystem) zuständig. Wieder ein anderer für ein angeschlossenes CI (Common Interface = dient der Entschlüsselung von PayTV-Programmen über eine Abo-Karte).

Diese einzelnen Bereiche werden über eine Klasse angesprochen. Vereinfacht ausgedrückt:

Es soll z. B. die Version des Frontends ausgegeben werden. Diese Funktion hat beispielsweise den Namen "FrontendVersion". Die Klasse heißt z. B. "NexusFrontend".

Dann ergibt sich daraus folgendes: NexusFrontend.FrontendVersion

Durch die Splittung der Funktionen in Bereiche wird das Ganze übersichtlicher und man weiß sofort, wo welche Funktion hingehört bzw. kann anhand der Klasse sehen, für welchen Bereich der Karte sie zuständig ist.

Was wir nun gemacht haben: wir haben von jedem Bereich eine Klasse erstellt (abgeleitet von TObject) und die dazugehörigen Funktionen als "Public" deklariert.

Das hab ich (in Kurzform) damit gemeint.

Zitat:
Zitat von DXler:
Hier ist nun die entsprechende C++-Funktion die die Firmware auf die Karte überträgt (der genaue Funktionsname ist geändert, damit wir nicht gegen die Lizenzbestimmung von TechnoTrend verstoßen):
Was sind denn das fuer Idioten (sowohl in Lizenz als auch in API)?
Habt ihr ein NDA unterschrieben?
Was die Leute bei TechnoTrend genau sind, kann ich nicht sagen (und da werd ich mich auch nicht zu äußern). Jedenfalls sind es die einzigen, die meines Wissens Programmierern überhaupt Hilfe geben! Andere Kartenhersteller lassen alles "closed" und geben keine Infos heraus.

Das "Lizenzabkommen" von TechnoTrend gibt es hier.
  Mit Zitat antworten Zitat
zorro888

Registriert seit: 29. Nov 2011
1 Beiträge
 
#6

AW: Übergabe eines CStrings in Delphi an eine DLL-Funktion

  Alt 29. Nov 2011, 10:42
Hallo,

bin auch am programmieren mit Borland Builder 6.0
Ebenso Nexus Karte
Hätte interesse an Quellcode.

Grüße Zorro
  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 17:24 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