ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 06 Okt 2010, 00:14 
Offline
Nuby

Registriert: 10 Jul 2010, 17:48
Beiträge: 2
Hallo zusammen,

Ich versuche meiner C++DLL Funktion einen String zu übergeben.
dazu benutze ich den Win32API-Aufruf:


1
2
testapi = Win32API.new("test", "funktion", ['p'], 'i')
testapi.call("EinString")

Jetzt hab ich das Problem, dass ich nicht weiß, wie mein String weitergereicht wird.
Ich hab es mit LPCTSTR versucht, da es bei vielen Windows.dlls benutzt wird, aber irgendwie kommt in meiner Funktion kein String an.

Als was kommt der String in meiner DLL an?
Ich hoffe jemand kann mir helfen.


Aja, noch ne Frage. Ich hab zuvor mal was fabriziert, was ich nicht verstehe:


1
2
#ruby:
testapi.call(result = " " * 10)



1
2
3
4
5
6
7
8
//dll:
#define DLL extern "C" __declspec(dllexport)
DLL string funktion(string input)
{
string wert = "Test";

return (wert);
}

Warum enthält result nach dem Aufruf den String "Test"?

mfg TWS


Nach oben
 Profil  
 
BeitragVerfasst: 06 Okt 2010, 14:59 
Offline
Interpreter
Benutzeravatar

Registriert: 18 Sep 2008, 22:32
Beiträge: 1821
Wohnort: NRW → UN
TheWhiteShadow hat geschrieben:
Jetzt hab ich das Problem, dass ich nicht weiß, wie mein String weitergereicht wird.
Win32API arbeitet da glaube ich mit char *, kann ich aber nicht mit Sicherheit sagen.

Vielleicht solltest du mal über die Verwendung von ffi nachdenken? Das macht dir das Leben doch um einiges einfacher als Win32API, das ohnehin deprecated ist.
TheWhiteShadow hat geschrieben:
Warum enthält result nach dem Aufruf den String "Test"?
Das ist komisch. Du kannst Ruby-Strings als Pointer missbrauchen, in die hineingeschrieben wird, aber da du das ja nicht tust, kann ich mir nicht erklären, warum result "Test" sein sollte. Der Rückgabewert des gesamten Ausdrucks ist "Test", ja, aber result müsste einen 10stelligen Leerstring halten. Was sagt ruby -v?

Disclaimer: Ich kann kein C++ und habe Ruby bislang nur durch C erweitert.

Vale,
Quintus

_________________
Habe den Mut, dich deines eigenen Verstandes zu bedienen! — Immanuel Kant

Ich bin freischaffender Softwareentwickler und freue mich über jedes neue Projekt. Kontaktinformation auf meiner Website.

Mein Blog | GitHub-Profil | Auf Twitter: @qquintilianus | PGP/GPG-Schlüssel: B1FE 958E D5E8 468E AA20 8F4B F1D8 799F BCC8 BC4F


Nach oben
 Profil  
 
BeitragVerfasst: 06 Okt 2010, 19:57 
Offline
Nuby

Registriert: 10 Jul 2010, 17:48
Beiträge: 2
Danke für die Antwort.
Ich hab es jetzt endlich geschafft. char* passt.

Quintus hat geschrieben:
Vielleicht solltest du mal über die Verwendung von ffi nachdenken?


Leider kommt das für mich nicht in Frage, weil ich in einer eingeschränkten Umgebung Programmiere, die keien zusätzlichen Moduleinbindungen erlaubt.

Wäre dem nicht so, würde ich mir gar nicht erst die Mühe machen mit einer DLL zu arbeiten.^^


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach: