AW: unsigned DWORD
Zitat:
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. |
AW: unsigned DWORD
Zitat:
Aber gut zu wissen das man mit der Compiler Direktive so was machen kann. gruss |
AW: unsigned DWORD
Zitat:
Zitat:
|
AW: unsigned DWORD
Zitat:
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:
VB6
function BASSVIS_FindPlugins(Kind: TBASSVIS_KIND_T; PluginPath: PAnsiChar; Searchflags: DWORD; Delimiter:AnsiChar=','): PAnsiChar; stdcall;
Code:
C++
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
Code:
CSharp
char* BASSVISDEF(BASSVIS_FindPlugins)(BASSVIS_KIND_T Kind, char *PluginPath, DWORD Searchflags, char *Delemiter); DWORD BASSVISDEF(BASSVIS_GetModuleHandle)(BASSVIS_KIND_T Kind, char *Pluginfile);
Code:
So jetzt definiere du mir mal wer nun für den Daten Typ der Rückgabe zuständig ist.
private static extern IntPtr BASSVIS_FindPlugins(BASSVISKind A_0, [In, MarshalAs(UnmanagedType.LPStr)] string A_1, BASSVISGetPlugin A_2, byte A_3);
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:
So..
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 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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:10 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