String to CString
Monkey Forums/Monkey Beginners/String to CString
| ||
| Hi all I need to convert a Monkey String to normal CString (char*) Any idea, how i can do that? My start was: char *StringToChar(String str)
{
char *c = str.ToCString<char>();
return "";
}but i gives me an error: main.cpp: In function 'char* StringToChar(String)': main.cpp:2213:31: error: invalid user-defined conversion from 'String::CString<char>' to 'char' [-fpermissive] char c = str.ToCString<char>(); can anybody help me? |
| ||
| Monkey uses wide char (Unicode) characters and strings. functions.cpp const Char* StringToChar(String str) {
return str.Data();
}
const Char* StringToCharZ(String str) {
return std::wstring(str.Data(),str.Length()).c_str();
}
String NullTerminatedString(String str) {
Char character=0;
return str + String(&character,1);
}
std::wstring StringToWString(String str) {
return std::wstring(str.Data(),str.Length());
}
String::CString<Char> StringToCString(String str) {
return str.ToCString<Char>();
}ToCString.monkey Import "functions.cpp"
Extern
Function StringToChar(str:String)
Function StringToWString(str:String)
Function StringToCString(str:String)
Function NullTerminatedString:String(str:String)
Public
Function Main:Int()
StringToChar("myString")
StringToWString("myString 2")
StringToCString("myString 3")
Local str:= NullTerminatedString("Hello World!")
For Local i:= 0 Until str.Length()
Print Int(str[i])
Next
Return 0
End |
| ||
| thanks for this hint.... in my case, it'ss pointless to use "String::CString<Char>" right? It's monkey only? |
| ||
| If you want C++ strings in C++ functions, I think you would use std::wstring(str.Data(),str.Length()) |
| ||
when i use str.Data(), then it seems like, it have none NULL Terminated end... how can i fix that?if (this->hWnd != 0) SetWindowTextW(this->hWnd, /*this->text.ToCString<char>()*/this->text.Data()); |
| ||
Tryif (this->hWnd != 0) SetWindowTextW(this->hWnd, std::wstring(this->text.Data(),this->text.Length()).c_str()); or const Char* StringToCharZ(String str) {
return std::wstring(str.Data(),str.Length()).c_str();
}
if (this->hWnd != 0)
SetWindowTextW( this->hWnd, StringToCharZ(this->text) );or String NullTerminatedString(String str) {
Char character=0;
return str + String(&character,1);
}
if (this->hWnd != 0)
SetWindowTextW( this->hWnd, NullTerminatedString(this->text).Data() );Better use NullTerminatedString() directly when you get the string from Monkey code, because WinAPI always wants Null-Terminated strings. Also edited first answer to show NullTerminatedString() in monkey code. |
| ||
| Ahhh thanks for the code. I was hoping, thats easier :D |
| ||
If you define this->text as being of type std::wstring, you would write API functions like this:if (this->hWnd != 0)
SetWindowTextW( this->hWnd, this->text.c_str() ); |