Einzelnen Beitrag anzeigen

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