Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ooops
Anmeldungsdatum: 03.10.2005 Beiträge: 16 Wohnort: Bremen
|
Verfasst am: 28.03.2009, 20:06 Titel: Wie verkette ich richtig Strings? |
|
|
Hallo, hier FB-Anfänger (sonst VBA)! Meine Frage:
Code: | Declare Function num (ByVal S As String) As String
Function num (ByVal S As String) As String
Dim i as integer
num = ""
For i = 1 To Len(S)
If 5 > Abs(Asc(Mid(S, i, 1)) - 52.5) Then _
num = num & Mid(S, i, 1)
Next
End Function |
meldet beim Kompilieren:
num.bas( error 1: Argument count mismatch, found '&' in 'num = num & Mid(S, i, 1)'
Nehme ich + statt &, kommt die gleiche Meldung. Was sollte ich anders machen? Danke für Antworten! |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 28.03.2009, 20:13 Titel: |
|
|
Hallo,
so funktioniert's:
Code: | Declare Function num (ByVal S As String) As String
Function num (ByVal S As String) As String
Dim i as integer
Dim temp as string
temp = ""
For i = 1 To Len(S)
If 5 > Abs(Asc(Mid(S, i, 1)) - 52.5) Then _
temp = temp & Mid(S, i, 1) 'oder kürzer: temp &= Mid(S, i, 1)
Next
num = temp 'oder: Return temp
End Function |
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
 |
ooops
Anmeldungsdatum: 03.10.2005 Beiträge: 16 Wohnort: Bremen
|
Verfasst am: 28.03.2009, 20:17 Titel: |
|
|
Funktionswerte dürfen anscheinend so in der Funktion selbst nicht behandelt werden. VBA ist da schlampiger. Ohne Meldung läuft durch:
Code: |
Declare Function num (ByVal S As String) As String
Function num (ByVal S As String) As String
Dim i as integer, n as string
n = ""
For i = 1 To Len(S)
If 5 > Abs(Asc(Mid(S, i, 1)) - 52.5) Then _
n = n + Mid(S, i, 1)
Next
num = n
End Function
|
|
|
Nach oben |
|
 |
ooops
Anmeldungsdatum: 03.10.2005 Beiträge: 16 Wohnort: Bremen
|
Verfasst am: 28.03.2009, 20:23 Titel: |
|
|
Sebastian hat Folgendes geschrieben: | Hallo,
so funktioniert's: (Code)
Viele Grüße!
Sebastian |
Danke, Sebastian!
Nächstes Problem: Commandzeilen-Error bei fbc:
"Syntax Error in def file num.def:0"
Wattn dat? Habe nur num.bas und num.dll ... |
|
Nach oben |
|
 |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 28.03.2009, 20:40 Titel: |
|
|
Du musst die Funktion als Export funktion definieren.
Also so: Code: | Declare Function num (ByVal S As String) As String
Function num (ByVal S As String) As String Export '<<<<<<
Dim i as integer
Dim temp as string
temp = ""
For i = 1 To Len(S)
If 5 > Abs(Asc(Mid(S, i, 1)) - 52.5) Then _
temp = temp & Mid(S, i, 1) 'oder kürzer: temp &= Mid(S, i, 1)
Next
num = temp 'oder: Return temp
End Function |
|
|
Nach oben |
|
 |
ooops
Anmeldungsdatum: 03.10.2005 Beiträge: 16 Wohnort: Bremen
|
Verfasst am: 28.03.2009, 20:53 Titel: |
|
|
Hat auch geklappt! Keine Meldung mehr in der Kommandozeile.
In Excel habe ich nun die Referenzierung darauf:
Code: | Declare Function num Lib "num" Alias "nums@4" ( _
ByVal S As String)
Function nums( _
ByVal S As String)
num S
nums = S$
End Function |
... aufgerufen in einer Zelle mit =nums(A1)
(in A1 steht ein String)
Excel meldet nun WERT! Das bedeutet: Die Funktion kennt es, denn wenn ich sage =numss(A1), fehlermeldet es NAME!
Hast Du dazu noch eine Idee? |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 28.03.2009, 21:53 Titel: |
|
|
ja
Beispiel FB\examples\dll\VB\fbside.bas
Code: | ''
'' compile as: fbc fbside.bas -dll
''
#include once "windows.bi"
#include once "win/ole2.bi"
'' notice the mangling method, it must be "windows-ms" or VB won't find any function
extern "windows-ms"
'':::::
function dupme ( byval arg as zstring ptr ) as BSTR export
dim res as BSTR
'' Note: according to MSDN, VB will only accept an BSTR result in
'' Unicode format *if* a COM type-library is created for the
'' DLL that is been called, otherwise the BSTR result must
'' be in ANSI format, what is this case
'' allocate a ANSI BSTR with twice the size
res = SysAllocStringByteLen( arg, len( *arg ) * 2 )
'' duplicate (BSTR's point to the data stream so just a cast is enough)
*cast( zstring ptr, res ) += *arg
'' return as-is
function = res
end function
end extern | Was für VB gilt, gilt auch für VBA!
EDIT/
siehe http://forum.qbasic.at/viewtopic.php?p=72452#72452 _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
|