1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Forum
  1. Informatik Forum
  2. Mitglieder
  3. Sphero

Beiträge von Sphero

  • System.Runtime.InteropServices.SEHException bei rekursiven Methodenaufruf?

    • Sphero
    • 17. Oktober 2011 um 14:30

    hab die Methode ausm Internet... aber egal, habs jetzt anders gelöst.
    hab das ganze filesystem-durchsuchen in ne mfc anwendung ausgelagert (innerhalb ging net weil ich beinm compilern/linken irgendwelche befehle hatte, die die funktion die ich dann benutz hab, nicht mochte).

    das ding hat mich echt nerven gekostet... aber naja nu läufts, hier der code, falls es für jemanden von interesse ist. Das programm gibt die Befehle für nen FTP programm aus, welche man mit > ftp.txt zbs. speichern kann...

    C
    // filesys.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
    //
    #include "stdafx.h"
    #include <afx.h>
    #include <string>
    #include <stdio.h>
    #include <iostream>
    #include <iostream>
    #include <ios>
    #include <ostream>
    #include <fstream>
    #include <Windows.h>
    #include <cmdtree.h>
    using namespace std;
    char* conversion(LPCTSTR val);
    CString filesys(CString path);
    char* cstr2ch(CString str);
    void tch2ch(const wchar_t* Src, char* Dest, int Size);
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
        char *ftpkram = "open dodo-pwns.de\nweb323\nWagner\ncd html\nmkdir uploadtest\ncd uploadtest\nprompt\n";
        //printf(ftpkram);
        CString suche = "C:\\temp\\installer_stable\\";
        filesys(suche);
        char *bye = "bye\n";
        printf(bye);
        return 0;
    }
    char* conversion(LPCTSTR val)
    {
     LPCWSTR wstr = val; 
     int count = wcslen(wstr);
     char* c = new char[count + 1]; 
     wchar_t* pwchr = const_cast<wchar_t*> (&wstr[0]);
     for(int j = 0; j < count; ++j)
     {
        c[j] = static_cast<char> (*pwchr);   
        pwchr++;
     }    
     c[count] = '\0';  
     wchar_t *op; 
     wcstombs(c,val,count);
     return c;
    }
    CString filesys(CString path) {
            CString result = "";
            char *breaker = "\n";
            char *mput = "mput ";
            char *back = "cd ..\n";
            char *mkdir = "mkdir ";
            char *cd = "cd ";
            char *stars = "\\*.*";
            char *pp = "..";
            BOOL finderFound = TRUE;
            CFileFind finder;
            CString searchString = path + "*";
            finderFound = finder.FindFile(searchString);
            BOOL wasFolder = FALSE;
            char *empty = "";
            int oncemore = 1;
                while (finderFound) {
                        LPCWSTR wstr = finder.GetFileTitle();
                        char *output = conversion(wstr);
                    if (finder.IsDirectory() && !finder.IsDots()) {
                            char* folder = "folder: ";
                            //printf(folder);printf(output);printf(breaker);
                            char *ort = cstr2ch(path);
                            // mkdir *folder*\n
                            printf(mkdir);printf(output);printf(breaker);
                            // cd *folder*\n
                            printf(cd);printf(output);printf(breaker);
                            CString fullpath = path + output;
                            char * pathing = cstr2ch(fullpath);
                            //printf(pathing);printf(breaker);
                            // mput *pathtofolder*\*.*
                            printf(mput);printf(pathing);printf(stars);printf(breaker);
                            CString newpath = path + output + "\\";
                            filesys(newpath);
                            // cd ..\n
                            printf(cd);printf(pp);printf(breaker);
                    }
                    /*else if (!finder.IsDots() && output != empty) {
                            char* file = "file: ";
                            printf(file);printf(output);printf(breaker);
                    }*/
    
                    finderFound = finder.FindNextFile();
                    if (!finderFound && oncemore == 1) {
                        oncemore = 0;
                        finderFound = TRUE;
                    }
    
                }
                finder.Close();
                return result;
    }
    char * cstr2ch(CString str) {
        const size_t StringSize = 10000;
        size_t CharactersConverted = 0;
        char DummyToChar[StringSize];
        wcstombs_s(&CharactersConverted, DummyToChar, 
               str.GetLength()+1, str, 
               _TRUNCATE);
    return DummyToChar;
    }
    void tch2Ch(const wchar_t* Src, char* Dest, int Size)
        {
            WideCharToMultiByte(CP_ACP, 0, Src, wcslen(Src)+1, Dest , Size, NULL, NULL);
        }
    Alles anzeigen

    Wahrscheinlich ziemlich unsauber, aber funktioniert...

  • System.Runtime.InteropServices.SEHException bei rekursiven Methodenaufruf?

    • Sphero
    • 16. Oktober 2011 um 00:29

    Servus,

    ich habe folgenden Code mit Visual Studio 2010 erstellt...

    Code
    void MarshalString ( String ^ s, string& os ) {
            using namespace Runtime::InteropServices;
            const char* chars = (const char*)(Marshal::StringToHGlobalAnsi(s)).ToPointer();
            os = chars;
            Marshal::FreeHGlobal(IntPtr((void*)chars));
        }
    
    
    
        string filesys(HANDLE hSearch, string prepath) {
    
    
            string doit = "";
            WIN32_FIND_DATA FData;
    
    
            if (hSearch == INVALID_HANDLE_VALUE) {doit += "ungültige suche!";}
            do {
                ////////////////////////////////////////////////////////
                // Umwandlungen
                    char ch[260];
                    char DefChar = ' ';
                    WideCharToMultiByte(CP_ACP,0,FData.cFileName,-1, ch,260,&DefChar, NULL);
                    string foldername(ch);
    
                ////////////////////////////////////////////////////////
                // Gültiger Ordner
                if (FData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY && foldername != "..") {
                    //doit += "mput *.*\n";
                    doit += foldername + "\n";
                    string path = prepath + foldername + "\\\\";
                    string newsearch = prepath + foldername + "\\\\*";
                    LPCWSTR newsearchpath = s2ws(newsearch);
                    WIN32_FIND_DATA FData;
                    HANDLE rekus = (newsearchpath,&FData);
                    doit += path;
                    doit += this->filesys(rekus, path);
                }
            } while (FindNextFile(hSearch,&FData) != 0);
    
    
            FindClose(hSearch);
            return doit;
        }
    
    
        LPCWSTR s2ws(const std::string& s) {
            int len;
            int slength = (int)s.length() + 1;
            len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0); 
            wchar_t* buf = new wchar_t[len];
            MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len);
            LPCWSTR r(buf);
            delete[] buf;
            return r;
        }
        }
    Alles anzeigen

    Ich versuche mit der Methode einen Subfolder (hier installer_stable) rekursiv durchsuchen zu lassen, damit ich mir später eine FTP-Command-File erstellen kann die mir dann die Ordner erstellt und alle Files hochläd. Das Problem hier: wenn ich die Methode rekursiv aufrufen lassen will, bekomm ich eine System.Runtime.InteropServices.SEHException. Bin jetzt noch nicht soo lange bei C++ dass mir das irgendwas sinnvolles sagen könnte.. hab nach der Exception gegooglet, aber is nicht wirklich was gescheites bei rausgekommen... In der MartialString Methode kommt der Namespace vor, deshalb hab ich die einfahc mal mitgepostet...

    wäre super wenn sich jemand die Zeit nehmen könnte und da mal schnell drübergucken kann... langsam verzweifel ich an dem teil, zwischendurch hats mal funktioniert, dann ging garnichts und musste quasi wieder bei 0 anfangen.. :-S

    mfg Sphero

  • Suche kommunikative Betatester für Smartphone-Internetcommunity

    • Sphero
    • 11. April 2011 um 19:28

    Hallo,

    suche für mein Projekt, welches hauptsächlich für Smartphones ausgelegt ist, einige Betatester.

    kurze Einleitung um was es geht:
    Es handelt sich um ein Fotoportal, bei dem man direkt vom Smartphone Fotos zu bestimmten Themen hochladen kann. Diese werden dann von den restlichen Usern bewertet und kommentiert. Das Thema, zu dem die Fotos passen sollen, ändert sich in regelmässigen abständen, es gibt Statistiken über Platzierungen bei früheren Themen etc.

    Voraussetzung:
    ihr besitzt ein Smartphone (zbs. iPhone, HTC etc) und natürlich Lust produktives Feedback zu geben :winking_face:

    Wenn ihr noch weitere Infos haben möchtet, oder gerne mitmachen würdet, würde ich mich über einen Beitrag hier im Threat freuen :winking_face:

    mfg Dodo

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English