lparam in String umwandeln ?



  • Hallo,

    ich habe folgenden Problemcode:

    TCHAR g_FileName[260];
    
    LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
    {
      switch (msg)
      {
        case WM_COMMAND:
        switch (LOWORD(wparam))
        {
          case IDC_SETOUTPUT :
          strcpy(g_FileName, lparam);      //Problemzeile
          break;
        }
        default:
        return DefWindowProc(hwnd, msg, wparam, lparam);
      }
      return 0;
    }
    

    Ich bekomme von einem anderen Programm im Parameter lparam einen String übergeben. Dieser soll in die Variable g_FileName übertragen werden.
    Die Fehlermeldung für die oben markierte Zeile lautet:
    *error C2664: 'strcpy' : Konvertierung des Parameters 1 von 'unsigned short [260]' in 'char ' nicht moeglich

    Was mache ich falsch ?

    Viele Grüße und vielen Dank vorab !



  • TCHAR scheint inkompatibel zu char * zu sein, ich würde einfach den dateinamen mit char g_FileName[260]; delkarieren.
    vielleicth funktioniert auch eine explizite umwandlung:

    strcpy((char *)g_FileName, lparam);

    lparam sollte jedenfalls kein problem sein.



  • wie wärs mit char[260]
    kann sein, dass dus dann noch in strcpy(&g_FileName, lparam); ändern musst

    is der übergebene string ein char oder tchar?



  • Erstmal Vielen Dank für die schnelle Reaktion !!!!
    Habe es mal folgendermaßen probiert:

    char g_FileName[260]; 
    strcpy(&g_FileName, lparam);
    

    Das führt zu dieser Meldung
    *error C2664: 'strcpy' : Konvertierung des Parameters 1 von 'char (*)[260]' in 'char ' nicht moeglich
    Die Typen, auf die verwiesen wird, sind nicht verwandt; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat

    Und

    char g_FileName[260]; 
    strcpy(g_FileName, lparam);
    

    führt zu dieser Meldung

    *error C2664: 'strcpy' : Konvertierung des Parameters 2 von 'long' in 'const char ' nicht moeglich
    Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat

    Irgendwie will er lparam als Long behandeln.
    Was ist lparam eigentlich für ein Datentyp ?

    Any Ideas ?

    Frank



  • du musst ihn noch umwandeln. lparam zeigt auf einen speicherbereich, ist also praktisch ein pointer, aber ohne typ.

    versuch mal:

    char g_FileName[260];
    strcpy(g_FileName, (char *)lparam);
    

    geht aber nur, wenn das andere programm einen string im c-format (char-array) übergibt, sonst gibt es einen runtime error



  • Klasse, so geht es ! VIelen Dank !

    Allerdings stehe ich jetzt vor dem Problem, wie ich meiner VB-Anwendung beibringe ein Char-Array zu senden .... ?
    "ABCDEFG" & vbNullString reciht offenbar nicht aus !

    Gruß Frank



  • hm... keine ahnung, ich kenne mich in vb ned aus. vielleicht kannst du in vb irgendwie auf den buffer zugreifen von dem string, der ist dann bestimmt kompatibel



  • Das werde ich irgendwie rausfinden.
    Dir jedenfalls Vielen Dank für die Tips !!! 👍



  • FraggleCAM schrieb:

    "ABCDEFG" & vbNullString

    Wenn, dann müßte es auch "ABCDEFG" & vbNullChar bzw. Chr$(0) heissen, soweit ich weiß...

    MFG
    Brian



  • von vb aus strings schicken hab ich schon gemacht
    allerdings an ne c++ dll funktion

    als parameter der c++ funktion hab ich char* genommen
    und in vb n string mit fester grösse übergeben Dim Bla As String*100 (oder so ähnlich)

    ohne feste grösse geht zwar auch ... is aber gefährlich



  • Dank für die Tips !!!

    Ich habe es nun mal folgendermaßen probiert

    _tcscpy(g_FileName, (PTSTR)lparam);
    

    Das bringt zwar keinen Fehler mehr beim Compilen,
    allerdings bekomme ich eine Unhandled Exeption : Access Violation,
    wenn ich den String übergebe.

    Ich sollte dazusagen, daß die sendende Applikation ein VB-Programm ist.

    Dort schicke ich folgendes:

    Private Const WM_COMMAND = &H111
    Private Const IDC_SETOUTPUT = 1100
    
    Dim strPath As String * 50
    strPath = "C:\Temp.txt" & vbNullChar
    SendMessage ApphWnd, WM_COMMAND, IDC_SETOUTPUT, ByVal strPath
    

    IDC_SETOUTPUT ist die C-Funktion, die dann oben stehende Umwandlungsfunktion enthält, und diesen String
    in die Variable g_FileName schreibt.

    Hat jemand eine Idee, wo der Fehler liegen könnte ?
    Ich tappe gerade ziemlich im dunkeln...

    Gruß
    Frank


Anmelden zum Antworten