Variable wird nicht übergeben ?
-
Ich lasse aus einem Button einen Dialog aufrufen mit dem
man eine Datei auswählt die auf der Festplatte liegt.
Die Variable die diesen Pfad übernimmt wird auch richtig
gefüllt.TCHAR str[1000]; //char Array für 1000 Zeichen CFileDialog dlg(TRUE); CString m_pathname1; if (dlg.DoModal() == IDOK) { m_pathname1 = dlg.GetPathName(); //Gewählten Dateipfad ermitteln } CString strPath = m_pathname1; int pos = strPath.ReverseFind( '\\'); // letztes '\' finden int pos2=atoi(strPath.Right(pos)); strPath=strPath.Mid(pos+1); MessageBox(strPath);//nur dateiname MessageBox(m_pathname1);//ganzer //m_pathname ist eine globale Variable
Wenn ich jedoch das ganze in einer anderen Funktion
der gleichen Klasse in einen LPSTR umwandeln will
ist die neue Variable plötzlich leer.LPSTR pfad1a = m_pathname .GetBuffer(m_pathname .GetLength()); MessageBox(pfad1a,m_pathname);//da kommt nix an
Woran kann das liegen bzw. was mache ich dabei falsch ?
-
hab es glaube ich schon raus!
CString str = _T("My String"); int nLen = str.GetLength(); LPTSTR lpszBuf = str.GetBuffer(nLen); // here do something with lpszBuf........... str.ReleaseBuffer();
-
Du weist der globalen Variablen m_pathname nirgends einen Wert zu.
Du solltest dir bessere Variablennamen ausdenken. ( du hast eine lokale Variable m_pathname1 und eine globale m_pathname )
Kurt
-
Ich habe die Variable in 2 Versionen zum testen gehabt.
Es wird jetzt zwar der Wert als LPTSTR übergeben, aber
wenn ich meine Daten an Outlook übergeben will sind die
Felder für die Datei wieder leer und die Email wird für
Outlook auch nicht erstellt://dateiname1 wird vom benutzer ausgewählt in dem o.g. dialog int nLen3 = dateiname1.GetLength(); LPTSTR lpszBuf3 = dateiname1.GetBuffer(nLen3); dateiname1.ReleaseBuffer(); MessageBox(lpszBuf3); //alles ok bis hier
Jetzt soll im weiteren Verlauf dieser
Funktion lpszBuf3 als Pfad angegeben werden:... mapifiledesc[0].ulReserved = 0; mapifiledesc[0].flFlags = 0; mapifiledesc[0].nPosition = -1; mapifiledesc[0].lpszPathName =lpszBuf; // Die erste Datei // so heisst die Datei im Anhang des EMails mapifiledesc[0].lpszFileName =lpszBuf3; //kritische Zeile mapifiledesc[0].lpFileType = 0; MessageBox(lpszBuf3); //auch hier ist der wert da !!
Nur warum wird, wenn lpszBuf3 richtig gefüllt ist der Wert nicht
in dieser Zeile übernommen ? Setze ich da "c:\\testdatei.txt" rein
geht es wiederum
-
Für mich ist dein Beispiel unlogisch
LPTSTR lpszBuf3 = dateiname1.GetBuffer(nLen3); dateiname1.ReleaseBuffer(); MessageBox(lpszBuf3); //alles ok bis hier
Zuerst holst du dir die Adresse eines String-puffers und gibst die Adresse sofort wieder frei bevor du den pointer überhaupt verwendest.
Aber das ist wahrscheinlich nicht dein Problem. Mit Outlook habe und will ich auch ich nichts zu tun haben. Sorry kann dir nicht weiterhelfen.
Kurt
-
Ich wäre schon glücklich wenn ich wissen würde wie ich diesen
Teil vom Code.mapifiledesc[0].lpszFileName ="c:\\test123.txt";
variabel halten kann. Etwa so:
mapifiledesc[0].lpszFileName = m_meinpfadcstring;
-
Ich habe schon so ziemlich alle möglichen Konvertierungen durchprobiert
und es will einfach nicht klappen
Habe auch schon +'\0' in der Verzweiflung probiert, weil ich das
bei FO_COPY mal so verwendet habe als nichts ging. Aber wie gesagt
bislang leider ohen Ergebnis
-
Aloha,
wat treibste da eigentlich ?
Du möchtest gerne ein Attachment an Deine Email rantackern und warum und vor allen Dingen was willst Du in FileName eintragen ???
Da kommt nur der Name des Attachments rein, was der Empfänger Deiner Email sieht.
Wenn der name identisch ist, schreib NULL rein.
Aber um Dein prinzipielles Problem zu lösen.
Du machst es schon richtig mit Deinem Code :
mapifeildecs[0].lpszFileName = dateiname1.GetBuffer(dateiname1.GetLength()); dateiname1.ReleaseBuffer();
Alles schick, nur dateiname1 darf keine lokale Variable sein, die am ende der Funktion gelöscht wird, nachdem Du sie zugewiesen hast.
Sonst haste natürlich keinen Wert mehr wenn Du Deine MapiFileDesc wieder in einer anderen Funktion aufrufst.Grüße
BOA