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 moeglichWas 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 musstis 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 FunktionsformatUnd
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 FunktionsformatIrgendwie 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 funktionals 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 strPathIDC_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