Hot News:

Unser Angebot:

  Foren auf CAD.de
  VBasic / vb.net / vbs / wsh
  Variablenübergabe an C++ mit Shell Befehl

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
Autor Thema:  Variablenübergabe an C++ mit Shell Befehl (1272 mal gelesen)
Domdom
Mitglied


Sehen Sie sich das Profil von Domdom an!   Senden Sie eine Private Message an Domdom  Schreiben Sie einen Gästebucheintrag für Domdom

Beiträge: 6
Registriert: 30.09.2005

erstellt am: 21. Nov. 2005 09:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
ich habe ein Problem.
Und zwar habe ich mit Visual Basic ein Programm geschrieben, dass für meine
Studienarbeit ein paar Werte aus einer CAD Datei berechnet. Diese müssen dann an
ein weiteres Programm übergeben werden, welches allerdings in C++ vorliegt.
Wenn ich in dem Shell Befehlt von VB alles im Klartext eingebe, also

Shell(speicherort übergabewert1 übergabewert2, 1)

funktioniert alles wunderbar in der weiteren C++ Berechnung.
So, nun möchte ich aber diese Werte in Variablen übergeben und in C++ über
den Cast Operator wieder heranzuholen.

int main ( int argc, char *argv[] )
{
// Der Übergabeparameter (Dateiname) wird in ein String umgewandelt.
string Filename_L = static_cast<string>(argv[1]); 


Wie gesagt im Klartext funktioniert es einwandfrei.
So, wenn ich nun in VB die Werte in einen String konvertiere, was auch funktioniert,
kriege ich solche "Werte" übergeben:
1.#QNAN 1.#QNAN 1.#QNAN für die ersten 3 Variablen
und
1.#INF 1.#INF 1.#INF
für die letzten 3 Variablen.

Hat jemand eine Idee, woran das liegt, daß es im Klartext funktioniert, aber
bei String Variablen nicht?
Habs auch schon als Variant versucht... aber immer das gleiche.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

clausb
Ehrenmitglied V.I.P. h.c.



Sehen Sie sich das Profil von clausb an!   Senden Sie eine Private Message an clausb  Schreiben Sie einen Gästebucheintrag für clausb

Beiträge: 2914
Registriert: 20.12.2000

Ich schreibe das hier in meiner Freizeit und spreche weder für meinen Arbeitgeber noch für andere Firmen. Mehr Unsinn von mir unter clausbrod.de.

erstellt am: 17. Dez. 2005 16:08    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Domdom 10 Unities + Antwort hilfreich

Ich verstehe die Beschreibung nicht - aus ihr kann man nicht wirklich erkennen, was Du da versuchst und warum es schiefgeht. Wie genau sieht das Shell-Kommando aus, und was genau uebergibst Du da?

Claus

------------------
OneSpace Designer Modeling FAQ: http://www.clausbrod.de/Osdm/

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas2DEasy
Mitglied
Softwareentwickler


Sehen Sie sich das Profil von Andreas2DEasy an!   Senden Sie eine Private Message an Andreas2DEasy  Schreiben Sie einen Gästebucheintrag für Andreas2DEasy

Beiträge: 73
Registriert: 29.12.2004

erstellt am: 24. Feb. 2006 21:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Domdom 10 Unities + Antwort hilfreich

für alle die es interessiert:
wenn schon Parameter als "char" erwartet werden sollte
man wenn variablen auch solche übergeben.
das heißt es müssen dann variablen vom Typ
eines nullterminierten Strings übergeben werden.
Sprachenübergreifend funktioniert die Übergabe von Strings
oder anderen Klassen nicht.
Dies gilt auch für DLLs  und alle anderen Programmiersprachen.

VB Spezifisch:

Variablen mit "ByVal" übergeben
Sie müssen immer das Schlüsselwort "ByVal" in der Deklaration angeben, obwohl Zeichenketten als Referenzparameter übergeben werden. Das liegt daran, dass Zeichenketten bei API-Funktionen intern als Zeiger behandelt werden. Normalerweise müssen Sie sich nicht um Zeiger kümmern. Doch eine Reihe von API-Funktionen (zum Beispiel "WriteProfileString" oder "GetProfileString") verhalten sich anders, wenn Sie ihnen einen Null-Zeiger übergeben. Einen Null-Zeiger können Sie ganz einfach an Windows übergeben: Sie benutzen wieder die vordefinierte Konstante vbNullString. Diese Konstante übergibt nicht einfach eine leere Zeichenkette an die Funktion, sondern einen "leeren" Zeiger, der auch als Long-Wert 0 ausgedrückt werden könnte. Ein solcher Null-Zeiger enthält keine Daten, das heißt er zeigt auf nichts und weist Windows an, das entsprechende Argument zu ignorieren.

Die Größe des reservierten Speichers
Sie benötigen zusätzlich eine Angabe über die Größe des reservierten Speicherbereichs. Der Puffer muss so groß sein, wie die Größenangabe vorsieht. Aus diesem Grunde sollten Sie mit Hilfe der Funktion String$() eine Zeichenkette in der richtigen Größe erzeugen und – sehr wichtig! – mit Null-Zeichen füllen. Wenn die von der Funktion erzeugte Zeichenkette länger ist, werden nur die Zeichen im Puffer abgelegt, die auch hineinpassen. Das Prinzip eines Aufrufes dieser Art sieht in Basic so aus:

sLen = 30
Buffer = String$(sLen, 0)
Result = TheAPIFunction(Buffer, sLen)
Null-terminierte String verwenden
Windows erwartet keine Basic-Strings, sondern nullterminierte Strings (siehe vorhergehende Seite "Handles, Zeiger und Null-Strings"). Der Vorteil dabei ist die Flexibilität: Dank der Speicherverwaltung von Windows können nullterminierte Strings im Prinzip beliebig lang werden. Leider verwaltet Visual Basic Strings intern vollkommen anders. In einigen Fällen können Sie VB-Strings analog zu nullterminierten Strings nutzen. Doch meistens müssen Sie Vorbereitungen treffen und zum Beispiel den String mit Null-Zeichen initialisieren oder mit vbNullChar explizit ein Null-Zeichen an seinem Ende anfügen:

VBStr = "Hallo Windows!"
WinStr = VbStr + vbNullChar

in Delphi übergibt man z.B den Typ PChar.

Gruß
Andreas


------------------
Nobody is perfect

[Diese Nachricht wurde von Andreas2DEasy am 24. Feb. 2006 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz