DLLFunction(..) USING ? Ja was denn...
Moderator: Moderatoren
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
DLLFunction(..) USING ? Ja was denn...
Hallo,
In der Doku stehen 3 mögliche Win32 Werte für USING:
DllFunctin() USING ...
STDCALL Standard für Windows 32bit API
CDECL C-Aufrufkonvention
OSAPI Aufruf für Betriebsystem API
oder nix für XPP...
Wenn ich jetzt eine fremde DLL habe, woher weiß ich dann was ich nehmen soll ?
RMCHART.DLL z.B. hat optionale Parameter, kann es dann über STDCALL aufgerufen werden oder muß es CDECL sein ?
In der Doku stehen 3 mögliche Win32 Werte für USING:
DllFunctin() USING ...
STDCALL Standard für Windows 32bit API
CDECL C-Aufrufkonvention
OSAPI Aufruf für Betriebsystem API
oder nix für XPP...
Wenn ich jetzt eine fremde DLL habe, woher weiß ich dann was ich nehmen soll ?
RMCHART.DLL z.B. hat optionale Parameter, kann es dann über STDCALL aufgerufen werden oder muß es CDECL sein ?
Gruß
Hubert
Hubert
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Hubert,
wenn Du in der entsprechenden Doku nichts findest, hilft nur ausprobieren
Im Falle von RMChart kannst Du ja schon mal davon ausgehen, dass Du einen Paramter angeben musst (da nicht in Xbase++ programmiert).
Also bleibt Dir die (sinnvolle) Wahl zwischen CDECL und STDCALL, von der ich erstgenannte mal zuerst versuchen würde...
Hast Du mal in dem langen Thread geschaut, ob da nicht was zu steht?
Viele Grüße,
Martin
wenn Du in der entsprechenden Doku nichts findest, hilft nur ausprobieren
Im Falle von RMChart kannst Du ja schon mal davon ausgehen, dass Du einen Paramter angeben musst (da nicht in Xbase++ programmiert).
Also bleibt Dir die (sinnvolle) Wahl zwischen CDECL und STDCALL, von der ich erstgenannte mal zuerst versuchen würde...
Hast Du mal in dem langen Thread geschaut, ob da nicht was zu steht?
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Parameter Typen
Hallo,
wenn ich mir die Parametererklärung von DllCall ansehe, scheinen bei der Übergabe alle numerischen Werte in LONG oder UnsignedLONG (DWORD) umgewandelt zu werden, wenn ich also double (8 Byte Fließkomma) brauche muß ich über F2BIN() oder ?
wenn ich mir die Parametererklärung von DllCall ansehe, scheinen bei der Übergabe alle numerischen Werte in LONG oder UnsignedLONG (DWORD) umgewandelt zu werden, wenn ich also double (8 Byte Fließkomma) brauche muß ich über F2BIN() oder ?
Gruß
Hubert
Hubert
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Parameter Typen
Hallo Hubert,
Martin
Günter Beyes hat dazu in der Alaska-Generic-Newsgroup vor einigen Wochen etwas gepostet:brandelh hat geschrieben:wenn ich mir die Parametererklärung von DllCall ansehe, scheinen bei der Übergabe alle numerischen Werte in LONG oder UnsignedLONG (DWORD) umgewandelt zu werden, wenn ich also double (8 Byte Fließkomma) brauche muß ich über F2BIN() oder ?
Viele Grüße,Günter Beyes hat geschrieben:FUNCTION AdsSetRelKeyPos( hIndex, nRelKeyPos )
STATIC tpl
LOCAL cDouble := F2Bin( nRelKeyPos )
LOCAL nLower := Bin2L( Left( cDouble, 4 ) )
LOCAL nUpper := Bin2L( Right( cDouble, 4 ) )
IF tpl == NIL
tpl := DllPrepareCall( "ace32.dll", ;
DLL_STDCALL, "AdsSetRelKeyPos" )
ENDIF
RETURN DllExecuteCall( tpl, hIndex, nLower, nUpper )
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Martin,
danke für den Hinweis, ich habe mit der Suchfunktion das ganze Alaska Forum nach DOUBLE und PARAMETER abgesucht, aber leider vor lauter Treffer den richtigen nicht gefunden
Schon blöd, dass man die Werte drehen muß.
Für was ist dann F2BIN überhaupt zu gebrauchen, wenn man die Werte doch wandeln muß.
Weißt du ob bei diesem Beispiel:
nLower := Bin2L( Left( cDouble, 4 ) )
der Parameter nLower und die Verwendung von
Bin2L( Left( cDouble, 4 ) )
bei der Parameterübergabe identisch sind ?
Es wird Zeit, dass wir in Xbase endlich gescheite Datentypen bekommen.
Nun kann ich zig Zeilen abändern.
danke für den Hinweis, ich habe mit der Suchfunktion das ganze Alaska Forum nach DOUBLE und PARAMETER abgesucht, aber leider vor lauter Treffer den richtigen nicht gefunden
Schon blöd, dass man die Werte drehen muß.
Für was ist dann F2BIN überhaupt zu gebrauchen, wenn man die Werte doch wandeln muß.
Weißt du ob bei diesem Beispiel:
nLower := Bin2L( Left( cDouble, 4 ) )
der Parameter nLower und die Verwendung von
Bin2L( Left( cDouble, 4 ) )
bei der Parameterübergabe identisch sind ?
Es wird Zeit, dass wir in Xbase endlich gescheite Datentypen bekommen.
Nun kann ich zig Zeilen abändern.
Gruß
Hubert
Hubert
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hier noch kurz zur Ergänzung der Umkehrschritt:
Beispiel:
Ausgabe:
Code: Alles auswählen
nDouble -> Parameter 1. nLow, 2. nHigh
nDouble := 123456789.123456789 // nDouble -> nLow,nHigh Parameter
cDouble := f2Bin(nDouble)
nLow := Bin2L( Left( cDouble, 4 ) ) // 1. Parameter
nHigh := Bin2L( right( cDouble, 4 ) ) // 2. Parameter
function(..., @nLow,@nHigh, .... // 2 Parameter statt einem nDouble !
Rückgabewert Parameter 1. nLow, 2. nHigh -> nDouble
(nur falls Übergabe per Referenz = @...)
nDouble := bin2F(l2bin(nLow)+l2bin(nHigh)) // -> nDouble
Code: Alles auswählen
proc main
local nLow, nHigh, nDouble, cDouble
nDouble := 123456789.123456789 // nDouble -> nLow,nHigh Parameter
cDouble := f2Bin(nDouble)
nLow := Bin2L( Left( cDouble, 4 ) ) // 1. Parameter
nHigh := Bin2L( right( cDouble, 4 ) ) // 2. Parameter
? "nDouble ",nDouble
? "cDouble ",cDouble
? "bin2F(cDouble)",bin2F(cDouble)
? "bin2F(cLO+cHI)",bin2F(l2bin(nLow)+l2bin(nHigh)) // -> nDouble
return
Code: Alles auswählen
nDouble 123456789,123456800
cDouble uk~T4oØA
bin2F(cDouble) 123456789,12345680
bin2F(cLO+cHI) 123456789,12345680
Gruß
Hubert
Hubert
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Hubert,
Aber Günter hat Dir ja gerade in der Newsgroup geantwortet...
Viele Grüße,
Martin
sorry - aber da muss ich passen! So tief bin ich in die Abgründe von Windows noch nicht eingedrungen!brandelh hat geschrieben:Weißt du ob bei diesem Beispiel:
Aber Günter hat Dir ja gerade in der Newsgroup geantwortet...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15695
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo,
Genau Günter hat mir eben mitgeteilt, dass der ganze Schmonz nicht nötig ist, wenn ein Parameter per Referenz übergeben werden soll ...
Also die Variable nDouble vom Typ Double wird so per Referenz übergeben:
cDouble := F2BIN(nDouble)
dllfunction xyz( @cDouble )
und dann ist der Rückgabewert ja ganz einfach zurückzuwandeln:
nDouble := BIN2F(cDouble)
Genau Günter hat mir eben mitgeteilt, dass der ganze Schmonz nicht nötig ist, wenn ein Parameter per Referenz übergeben werden soll ...
Also die Variable nDouble vom Typ Double wird so per Referenz übergeben:
cDouble := F2BIN(nDouble)
dllfunction xyz( @cDouble )
und dann ist der Rückgabewert ja ganz einfach zurückzuwandeln:
nDouble := BIN2F(cDouble)
Gruß
Hubert
Hubert
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Hallo Hubert,
sage mir doch bitte Bescheid, wenn Du mit der RMChart-Integration soweit fertig bist - ich könnte das sehr gut für einen Webserver gebrauchen, den ich gerade entwickle
Ich möchte da nämlich Balken- und Kreisdiagramme anhand der Meldungen erzeugen und als GIF speichern können.
Mit ActiveX möchte ich mir für dieses "kleine" Projekt nicht extra noch unnötig overhead aufladen und ein kommerzielles Produkt rechnet sich nicht, da ich diesen Webserver sozusagen "ehrenamtlich" (also ohne dafür was zu bekommen) entwickle.
Aber trotzdem schwebt mir halt vor, das ganze ein wenig "aufzuhübschen", so dass sich jeder, der dort melden will, anzeigen lassen kann, wie andere sich bei einzelnen Dingen entschieden haben.
Ich habe mir gerade mal von James Loughner die BARCHART.ZIP heruntergeladen und werde sie mir heute nachmittag mal anschauen, aber da ist - glaube ich - kein Kreisdiagramm bei...
Viele Grüße,
Martin
sage mir doch bitte Bescheid, wenn Du mit der RMChart-Integration soweit fertig bist - ich könnte das sehr gut für einen Webserver gebrauchen, den ich gerade entwickle
Ich möchte da nämlich Balken- und Kreisdiagramme anhand der Meldungen erzeugen und als GIF speichern können.
Mit ActiveX möchte ich mir für dieses "kleine" Projekt nicht extra noch unnötig overhead aufladen und ein kommerzielles Produkt rechnet sich nicht, da ich diesen Webserver sozusagen "ehrenamtlich" (also ohne dafür was zu bekommen) entwickle.
Aber trotzdem schwebt mir halt vor, das ganze ein wenig "aufzuhübschen", so dass sich jeder, der dort melden will, anzeigen lassen kann, wie andere sich bei einzelnen Dingen entschieden haben.
Ich habe mir gerade mal von James Loughner die BARCHART.ZIP heruntergeladen und werde sie mir heute nachmittag mal anschauen, aber da ist - glaube ich - kein Kreisdiagramm bei...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.