AGB  ·  Datenschutz  ·  Impressum  







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

unsigned DWORD

Ein Thema von EWeiss · begonnen am 18. Feb 2017 · letzter Beitrag vom 20. Feb 2017
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.649 Beiträge
 
Delphi 11 Alexandria
 
#21

AW: unsigned DWORD

  Alt 19. Feb 2017, 14:15
Aber für jede inklusive das Abspielen von Musik externe Units anzulegen ist nicht umsetzbar und
würde nichts bringen da ich am ende doch von der Main Form darauf zugreifen muss.
Bei uns läuft eine ganze Kassenanwendung und der Quelltext des Hauptformulars ist 250 Zeilen lang...

Dass man das nicht mal eben so nachträglich macht, ist aber sicher richtig. Deshalb habe ich ja auch nur gesagt, dass das dann schlecht geht, und nicht, dass du das ändern sollst.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#22

AW: unsigned DWORD

  Alt 19. Feb 2017, 14:24
Zitat:
und nicht, dass du das ändern sollst.
Wollte damit nur sagen das ich gerne meine Units Themen basiert zusammen fasse.

Aber gut zu wissen das man mit der Compiler Direktive so was machen kann.

gruss
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#23

AW: unsigned DWORD

  Alt 19. Feb 2017, 22:52
Muss dann wohl alle DWords mit LongInt ersetzen. bzw.. nur die Rückgabe.

Hoffe mal das es hilft.
Aber nebenbei es nimmt kein ende.
Habe es nach LongInt geändert.

Nun bekomme ich hier einen ERangeError.
Vielleicht bin ich jetzt zu naiv, aber: Warum änderst du es in diese Richtung? Und nicht von int zu DWORD? Wenn die dll DWORD zurückgibt, dann muss man das erstmal hinnehmen, oder?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#24

AW: unsigned DWORD

  Alt 20. Feb 2017, 04:33
Zitat:
Wenn die dll DWORD zurückgibt, dann muss man das erstmal hinnehmen, oder?
Nö muss man nicht! (Und kann man auch nicht)

Man muss nur dafür sorge tragen das der Daten Typ vom Bereich her passt.
Oder warum denkst du das mit ein und der gleichen Funktion die von der DLL veröffentlicht wird
mehrere unterschiedliche Sprachen miteinander kommunizieren können.

Letztendlich zählt nur die Auswertung der Rückgabe.

bsp.
Nur weil ich unter Delphi einen PAnsiChar als Rückgabe einer Funktion erwarte ist die andere Sprache nicht
dazu gezwungen exakt diese Namensgebung auch zu verwenden.

Ausgabe: Library Delphi
Delphi
Code:
function BASSVIS_FindPlugins(Kind: TBASSVIS_KIND_T; PluginPath: PAnsiChar; Searchflags: DWORD; Delimiter:AnsiChar=','): PAnsiChar; stdcall;
VB6
Code:
Public Declare Function BASSVIS_FindPlugins Lib "bass_vis.dll" (ByVal Kind As BASSVISKIND, ByVal PluginPath As Any, ByVal Searchflags As Long, Optional(ByVal delemiter As Byte = 44) As Long
C++
Code:
char* BASSVISDEF(BASSVIS_FindPlugins)(BASSVIS_KIND_T Kind, char *PluginPath, DWORD Searchflags, char *Delemiter); DWORD BASSVISDEF(BASSVIS_GetModuleHandle)(BASSVIS_KIND_T Kind, char *Pluginfile);
CSharp
Code:
private static extern IntPtr BASSVIS_FindPlugins(BASSVISKind A_0, [In, MarshalAs(UnmanagedType.LPStr)] string A_1, BASSVISGetPlugin A_2, byte A_3);
So jetzt definiere du mir mal wer nun für den Daten Typ der Rückgabe zuständig ist.
Mein DLL und oder die jeweilige Programmiersprache.
Der Bereich des Daten Typ muss stimmen und da hatte ich nach dem Vorschlag nicht nachgesehen in dem Fall hätte ich ihn auch nicht geändert.

Und wenn er nicht passt muss man ihn passend machen!
Das obliegt aber der Sprache die meine DLL nutzen möchte, Nicht umgekehrt so wie du das denkst.

VB6
Code:
Dim flist  As String
Dim LngP   As Long

LngP = BASSVIS_FindPlugins( _
       BASSVISKIND_WINAMP, _
       PluginDir, _
       BASS_VIS_FIND_RECURSIVE)

flist = VBStrFromAnsiPtr(LngP)
alist = Split(flist, ",")
Code:
Public Function VBStrFromAnsiPtr(ByVal lpStr As Long) As String

Dim bStr() As Byte
Dim cChars As Long

    On Error Resume Next
        ' Get the number of characters in the buffer
        cChars = lstrlen(lpStr)
        If cChars Then
            ' Resize the byte array
            ReDim bStr(0 To cChars - 1) As Byte
            ' Grab the ANSI buffer
            Call CopyMemory(bStr(0), ByVal lpStr, cChars)
        End If
        ' Now convert to a VB Unicode string
        VBStrFromAnsiPtr = StrConv(bStr, vbUnicode)

End Function
So..
Und das es nicht funktioniert mit unsigned DWord und signed C++ bei eigeschalteter Bereichsprüfung
liegt am ende schlichtweg daran das der Compiler unter D2010 bei der Bereichsprüfung fehlerhaft ist.
Anders kann ich mir das nicht erklären.

Gäbe es jetzt einen Daten Typ in Delphi der im Bereich von -4294967295 bis 4294967295 läge würde ich ihn nehmen
dabei würde es für mich keine rolle spielen wie der Daten Typ benannt ist.


gruss

Geändert von EWeiss (20. Feb 2017 um 04:49 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 08:06 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