Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Char an DLL übergeben (https://www.delphipraxis.net/76430-char-dll-uebergeben.html)

Andru 4. Sep 2006 13:47


Char an DLL übergeben
 
Aloha,

ich stehe momentan vor einem Problem. Ich muss eine DLL ansprechen und dabei Parameter übergeben.

Die Funktionsdoku gibt Folgendes wieder:
Code:
OpenPlayer(
HANDLE handle,
char ip,
int port,
LIVEMODE mode,
int buffers,
int buffersize,
int priority)
Was mach ich nun aber mit 'Char'? Glaube die Doku ist für C oder C++.
Wie übergebe ich die IP? Kann ich daraus einfach einen String machen und übergeben?

Was mach ich bei LIVEMODE? Hier steht mode=LOW_DELAY_MODE ... kann ich hier eine Konstante definieren?

Bin leider noch nicht wirklich gut betucht in Sachen Programierung.
Und die Unterschiede zwischen Char, PChar und String sind mir auch noch nicht so ganz klar.
Hab zwar schon TUTs gesehen, aber war da doch ein wenig faul.

Hoffe, Ihr könnt mir da helfen.


Gruß

Andru

Vielen Dank im Voraus.

JasonDX 4. Sep 2006 13:56

Re: Char an DLL übergeben
 
Zitat:

Zitat von Andru
Die Funktionsdoku gibt Folgendes wieder:
Code:
OpenPlayer(
HANDLE handle,
char ip,
int port,
LIVEMODE mode,
int buffers,
int buffersize,
int priority)
Was mach ich nun aber mit 'Char'? Glaube die Doku ist für C oder C++.
Wie übergebe ich die IP? Kann ich daraus einfach einen String machen und übergeben?

Ein Char ist ein 8Bit (1Byte) grosser Datentyp. Ein String ist eine aneinanderreihung von Chars, also ein array, eine Liste von Chars. Ein PChar wiederrum ist ein Zeiger auf einen Char.
Wenn ein Char verlangt wird, musst du ihm auch einen geben. Zu deutsch: Hier gehoert auch wieder ein char als parameter hin, sprich auch das was in Delphi als Delphi-Referenz durchsuchenChar bekannt ist. Wenn allerdings der Bezeicher "ip" das sein soll, was er verspricht, so bleibt es mir ein Raetsel, wie man in einen 1Byte grossen Typ 4Byte reinkriegen soll. Die Funktion verlangt jedenfalls einen 1 Byte grossen Parameter.

Zitat:

Zitat von Andru
Was mach ich bei LIVEMODE? Hier steht mode=LOW_DELAY_MODE ... kann ich hier eine Konstante definieren?

LIVEMODE scheint ein selbst definierter Datentyp zu sein. Hier sollte in der Dokumentation beschrieben sein, was er genau ist. Er wird wahrscheinlich ein struct (Delphi: (Delphi-Referenz durchsuchenpacked)Delphi-Referenz durchsuchenRecord) sein, da laesst sich aber ohne genauere angaben nur darueber spekulieren.

greetz
Mike

cringely 4. Sep 2006 14:10

Re: Char an DLL übergeben
 
Zitat:

Zitat von JasonDX
Zitat:

Zitat von Andru
Die Funktionsdoku gibt Folgendes wieder:
Code:
OpenPlayer(
HANDLE handle,
char ip,
int port,
LIVEMODE mode,
int buffers,
int buffersize,
int priority)
Was mach ich nun aber mit 'Char'? Glaube die Doku ist für C oder C++.
Wie übergebe ich die IP? Kann ich daraus einfach einen String machen und übergeben?

Ein Char ist ein 8Bit (1Byte) grosser Datentyp. Ein String ist eine aneinanderreihung von Chars, also ein array, eine Liste von Chars. Ein PChar wiederrum ist ein Zeiger auf einen Char.
Wenn ein Char verlangt wird, musst du ihm auch einen geben. Zu deutsch: Hier gehoert auch wieder ein char als parameter hin, sprich auch das was in Delphi als Delphi-Referenz durchsuchenChar bekannt ist. Wenn allerdings der Bezeicher "ip" das sein soll, was er verspricht, so bleibt es mir ein Raetsel, wie man in einen 1Byte grossen Typ 4Byte reinkriegen soll. Die Funktion verlangt jedenfalls einen 1 Byte grossen Parameter.

Zitat:

Zitat von Andru
Was mach ich bei LIVEMODE? Hier steht mode=LOW_DELAY_MODE ... kann ich hier eine Konstante definieren?

LIVEMODE scheint ein selbst definierter Datentyp zu sein. Hier sollte in der Dokumentation beschrieben sein, was er genau ist. Er wird wahrscheinlich ein struct (Delphi: (Delphi-Referenz durchsuchenpacked)Delphi-Referenz durchsuchenRecord) sein, da laesst sich aber ohne genauere angaben nur darueber spekulieren.

greetz
Mike

Ich denke, bei LIVEMODE wird es sich um eine Kontante oder einen enumerierten Typen handeln - zumindest sind die Anzeichen dazu da. Die sollten wohl in einer .h-Datei (bei C/C++ Quellen) oder in dem Source direkt angegeben sein. Bei enumerierten Typen ist ja die Reihenfolge wichtig, bei Konstanten einfach nur der Wert.

Grüße.

/edit
Das "char" sollte wohl eher "*char ip" heißen, also eine Zeichenkette - ich kann mir nicht vorstellen, dass eine IP durch ein Zeichen komplett abgebildet werden kann. Du kannst ein String dort übergeben, aber wichtig bei DLLs ist, dass Du 'shortstring' benutzen mußt, da das C-Runtime-Environment (welche durch die DLL-Ansteuerung eigentlich verwendet wird) den "normalen" Stringtypen von Delphi nicht interpretieren kann. Shortstring ist auf 255 Zeichen begrenzt - sollte aber locker für ipv4 bis ipv6 reichen :-)

Andru 4. Sep 2006 14:52

Re: Char an DLL übergeben
 
Zitat:

Zitat von cringely
Zitat:

Zitat von JasonDX

Zitat:

Zitat von Andru
Was mach ich bei LIVEMODE? Hier steht mode=LOW_DELAY_MODE ... kann ich hier eine Konstante definieren?

LIVEMODE scheint ein selbst definierter Datentyp zu sein. Hier sollte in der Dokumentation beschrieben sein, was er genau ist. Er wird wahrscheinlich ein struct (Delphi: (Delphi-Referenz durchsuchenpacked)Delphi-Referenz durchsuchenRecord) sein, da laesst sich aber ohne genauere angaben nur darueber spekulieren.

greetz
Mike

Ich denke, bei LIVEMODE wird es sich um eine Kontante oder einen enumerierten Typen handeln - zumindest sind die Anzeichen dazu da. Die sollten wohl in einer .h-Datei (bei C/C++ Quellen) oder in dem Source direkt angegeben sein. Bei enumerierten Typen ist ja die Reihenfolge wichtig, bei Konstanten einfach nur der Wert.

Grüße.


Also leider ist in der Doku nicht mehr zu erkennen außer halt dem genannten Wert.
Denke aber, dass ich dort einen String übergeben kann.


Zitat:

Zitat von cringely
/edit
Das "char" sollte wohl eher "*char ip" heißen, also eine Zeichenkette - ich kann mir nicht vorstellen, dass eine IP durch ein Zeichen komplett abgebildet werden kann. Du kannst ein String dort übergeben, aber wichtig bei DLLs ist, dass Du 'shortstring' benutzen mußt, da das C-Runtime-Environment (welche durch die DLL-Ansteuerung eigentlich verwendet wird) den "normalen" Stringtypen von Delphi nicht interpretieren kann. Shortstring ist auf 255 Zeichen begrenzt - sollte aber locker für ipv4 bis ipv6 reichen :-)

Du hast Recht: In der Doku steht Char* - nur dachte ich fälschlicherweise, dass es sich um einen Anhang handelt, der
dann später erläutert werrden sollte. Hatte dazu allerdings auch Nichts gefunden.
Und vielen Dank für den Tipp mit dem ShortString. Wusste ich auch nicht, dass C nur damit umgehen kann.

Hab jetzt jedenfalls eine Menge, die ich nun ausprobieren kann. :)

Danke Euch beiden nochmals!


Gruß Andru


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:47 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