Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

FBC64 Rückgabe String Funktion an VB.NET Aufruf

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
rexxitall



Anmeldungsdatum: 10.09.2007
Beiträge: 12
Wohnort: Hildesheim

BeitragVerfasst am: 09.02.2018, 12:52    Titel: FBC64 Rückgabe String Funktion an VB.NET Aufruf Antworten mit Zitat

Hi lächeln

Ich verzweifele gerade an dem eigentlich durchaus trivialen Versuch String Funktionen mit Rückgabewert zu schreiben
ACHTUNG: alles 64 BIT !!!

sowas wie
function S(x as string) as string
return x & "blah"
end function.

Der Haken, diese Funktion sitzt in einer DLL welche ich aus VB.NET (64 bit Assembly) aufrufen möchte
Soetwas in eine SUB reinzubekommen funktioniert recht simpel: *öhm*

Aufruf in VB.NET z.B. mit
Declare Auto Sub OBOX2 Lib "D:\FREEBASIC\Projects\fbnet\fbnet.dll" (ByVal s As String)


Public Sub OBOX2(Byval s As WString Ptr ) Export
OBOX( *s & "Freebasic ist cool")
Dim As Integer iResult
iResult = MessageBox(0, S, "MSG",MB_YESNO Or MB_ICONQUESTION Or MB_DEFBUTTON2 or MB_SYSTEMMODAL)
End Sub

Message Box kommt wie erwartet.

Aber wehe man will Werte zurück übertragen bekommen. :/

Vielleicht hat ja schon mal jemand sich an soetwas versucht und kann mir etwas Beispiel Code zukommen lassen lächeln

Lieben Gruß
Thomas
_________________
Hang on to your dreams and get rid all the assholes
J.D. Ballard
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 09.02.2018, 14:41    Titel: Antworten mit Zitat

Wenn du die Funktion in einer DLL innerhalb einer anderen Programmiersprache verwenden willst, fürchte ich, dass du keinen FreeBSIC-STRING verwenden kannst. Das ist ein interner Datentyp, der in dieser Form anderswo nicht existiert (vermutlich verwendet auch VB intern eine andere Verwaltung). Wenn ich das richtig sehe, überträgst du von VB aus einen WSTRING PTR, der dann von FreeBASIC automatisch in das passende STRING-Format umgewandelt wird (in diese Richtung kein Problem). Wenn aber FreeBASIC einen String zurückgibt, kann dieser von einer anderen Programmiersprache nicht automatisch in einen ZSTRING o. ä. umgewandelt werden.

Funktioniert es, wenn du stattdessen einen ZSTRING PTR zurückgibst?
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
rexxitall



Anmeldungsdatum: 10.09.2007
Beiträge: 12
Wohnort: Hildesheim

BeitragVerfasst am: 09.02.2018, 15:32    Titel: Z String Ptr Antworten mit Zitat

Hi,
Zstring PTR habe ich auch versucht.
Das die FB strings nicht funktionieren ist mir auch klar,
Wenn die täten, gäb es das Problem ja nicht zwinkern

IN VBA gehts mit BSTR aber na klar musste M$ ja sich für .net ne neue Schikane einfallen lassen ... Bei sowas kannst verzweifeln. Ist ja nicht so, das ich erst seit gestern programmiere *lacht* eher seit Jahrzehnten. Und dann kommt sowas und du steht wie Ochs vorm Berg.
Lieben Gruß Thomas
_________________
Hang on to your dreams and get rid all the assholes
J.D. Ballard
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger
rexxitall



Anmeldungsdatum: 10.09.2007
Beiträge: 12
Wohnort: Hildesheim

BeitragVerfasst am: 13.02.2018, 09:23    Titel: Antworten mit Zitat

Hi mit Hilfe von ST_W aus dem Chat sind wir auf folgende Variante gestossen.
Die hat allerdings ein paar Schönheitsfehler. Sie benötigt ein zeitintensives Marshalling in .NET und und die Memallocation ist auch nicht wirklich prickelnd. Wenn ich mir dazu noch UDTs ansehe oder wie man Strings in diese verfrachtet schwant mir böses :/ Aber vielleicht hat der eine oder andere ja ne grelölere Idee auf Lager wenn er den Code Sieht.
Lieben Gruß Thomas


Code:
Extern "windows-ms"
sub freemem(p as any ptr) export
deallocate(p)
end Sub

Function s2zsp (s As String ) As ZString Ptr
Dim As ZString Ptr pstr
pstr = Allocate( len(s) * SizeOf(ZString) )
*pstr = S
Return pstr
End Function

Function getstr(Byval si As ZString Ptr) As ZString Ptr Export
dim s as string
Return s2zsp(UCase (*si))
End Function

'end extern

and VB.net:
Imports System
Imports System.Runtime.InteropServices



Module Module1



<DllImport("D:\FREEBASIC\Projects\fbnet\fbnet.dll", EntryPoint:="freemem")>
Sub freemem_native(p As IntPtr)
End Sub



<DllImport("D:\FREEBASIC\Projects\fbnet\fbnet.dll", EntryPoint:="getstr")>
Function getstr_native(ByVal s As String) As IntPtr
End Function



Function FBSTR(strptr As IntPtr) As String
Dim s As String = Marshal.PtrToStringAnsi(strptr)
freemem_native(strptr)
Return s
End Function



Function getstr() As String
Dim strptr As IntPtr = getstr_native("asaa")
Dim s As String = Marshal.PtrToStringAnsi(strptr)
freemem_native(strptr)
Return s
End Function



Sub Main()
Console.WriteLine("from FreeBasic: " & FBSTR(getstr_native("123456hjk")))
Console.ReadKey()
End Sub
end module

_________________
Hang on to your dreams and get rid all the assholes
J.D. Ballard
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen Yahoo Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz