BOOL Skype::SendCommand(const wstring& command) { const char* buffer = ToANSI(command); COPYDATASTRUCT cds; cds.dwData = 0; cds.lpData = (void*)buffer; cds.cbData = strlen(buffer) + 1; if (SendMessage(hwnd_skype, WM_COPYDATA, reinterpret_cast<WPARAM>(hwnd), reinterpret_cast<LPARAM>(&cds)) == FALSE) { LOG(LevelError, L"WM_COPYDATA failed."); hwnd_skype = nullptr; return FALSE; } else { LOG(LevelDebug, L"WM_COPYDATA succeeded."); return TRUE; } }
static char *utf8_to_ansi(struct InstData *data, STRPTR src) { static struct KeyMap *keymap; CONST_STRPTR ptr; STRPTR dst; ULONG octets, strlength; ENTER(); keymap = AskKeyMapDefault(); strlength = 0; ptr = src; do { WCHAR wc; UBYTE c; ptr += (octets = UTF8_Decode(ptr, &wc)); c = ToANSI(wc, keymap); strlength++; /* ToANSI() returns '?' if there is not matching code point in the current keymap */ if (c == '?' && wc != '?') { /* If direct conversion fails try compatibility decomposition (but without recursion) */ CONST_WSTRPTR p = UCS4_Decompose(wc); if (p) { while (p[1]) { strlength++; p++; } } } } while (octets > 0); dst = MyAllocPooled(data->mypool, strlength); if (dst) { STRPTR bufptr = dst; ptr = src; do { WCHAR wc; UBYTE c; ptr += (octets = UTF8_Decode(ptr, &wc)); c = ToANSI(wc, keymap); *bufptr++ = c; if (c == '?' && wc != '?') { CONST_WSTRPTR p = UCS4_Decompose(wc); if (p) { bufptr--; while (*p) { *bufptr++ = ToANSI(*p, keymap); p++; } } } } while (octets > 0); MyFreePooled(data->mypool, src); // Free original buffer } if(dst == NULL) dst = src; RETURN(dst); return dst; }
MinimalW2A(const wchar_t *source) { ToANSI(this->s, source); }