Использование функции SendMessageW Я передаю строку C# как параметр функции C++. Я приписываю CString в C++, но значение пусто. Пожалуйста, проверьте ниже код и предоставьте решениеКак преобразовать строку C# в строку C++ при передаче строки в качестве параметра с помощью winapis
----------------------- C# code -------------- ----
public unsafe IntPtr Testing()
{
string string_aux = "Stringtochange";
void* pt = Marshal.StringToBSTR(string_aux).ToPointer();
IntPtr ab = new IntPtr(pt);
return ab;
}
public void GetValue()
{
SendMessageW(utilityHandle1, TVM_GETITEMHEIGHT, handle,Testing());
}
--------------------- C++ код --------------
CString *st = (CString*)lParam;
MessageBox(NULL,*st,L"stringvalue",NULL);
Здесь * st значение пусто.
Я посылаю пользовательское сообщение вместо TVM_GETITEMHEIGHT. Я новичок в C++. Я использовал Marshal.StringToUni в C#, но я не знаю, как преобразовать 'LPARAM' в 'wchar_t *' и 'CString'. Можете ли вы рассказать код C++ для скрытого 'LPARAM' до 'CString' – user1915370
Вы знаете, как это сделать. У вас есть код в вашем ответе. Вставьте 'lParam' в' wchar_t * '. С '(wchar_t *) lParam'. Или 'reinterpret_cast) (lParam)'. Вам не нужно 'CString' для вызова' MessageBoxW'. –
Он должен иметь возможность использовать 'CString s = (const wchar_t *) lParam;'? хотя это необязательно, если вам не нужно делать какое-то строковое форматирование с помощью 'CString' –