powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Из WideString в char* и обратно.
5 сообщений из 5, страница 1 из 1
Из WideString в char* и обратно.
    #32279798
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне нужно передать в библиотеку WideString.
Я это делаю через char*: StrPCopy(WStr,cStr);
А вот как получить обратно из char* в WideString внутри библиотеки,
чтобы было все нормально с памятью.
Подскажите как правильно сделать (может я и в char* некорректно добавляю?).
...
Рейтинг: 0 / 0
Из WideString в char* и обратно.
    #32279978
123456789098
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а что значит "может я и в char* некорректно добавляю" ?
если это выглядит что то типа (ну или сводится к этому)
char *a="asasa";
char *b="sdfsdf";
char *c=a+b;
то конечно не правельно.
покажи кусок где не хочет работать тогд аполучишь более точный ответ
...
Рейтинг: 0 / 0
Из WideString в char* и обратно.
    #32280244
Cactus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробуй так:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
#include <atlbase.h>
{
USES_CONVERSION;
char * szChar = (char*) "qqqqq" ;
wchar_t szWchar[ 16 ];

wcscpy(szWchar, A2W(szChar));
strcpy(szChar, W2A(szWchar))
}


Если есть возможность, то откажись от char* и используй TCHAR*.

Конвертация тогда будет
T2W
W2T
...
Рейтинг: 0 / 0
Из WideString в char* и обратно.
    #32280539
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Загрузку библиотеки делаю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
char* CStr = new char[ADOConnection1->ConnectionString.Length()+ 1 ];
    StrPCopy(CStr, WideToAnsi(ADOConnection1->ConnectionString));
    typedef int (*PEditing)(char*,long int, int, long int);
AnsiString dllSource = ExtractFilePath(Application->ExeName)+ "mas.dll" ;
if (HMODULE masterDll = LoadLibrary(dllSource.c_str()))
    {
       if (PEditing Ed = (PEditing)GetProcAddress(masterDll, "Editing" ))
       {
         t = Ed(CStr, EdKeyTable, EdNewOrChange, EdKeyObject);
       }
       if (!FreeLibrary(masterDll)) MessageDlg( "Неудалось выгрузить библиотеку\" mas.dll\ "." ,mtError, TMsgDlgButtons() << mbOK,  0 );
    }
    else MessageDlg( "Неудалось выгрузить библиотеку \" mas.dll\ "." ,mtError, TMsgDlgButtons() << mbOK,  0 );
    delete[] CStr;


Внутри dll читаю char* таким образом:

Код: plaintext
1.
2.
3.
4.
5.
int Editing(const char* ConnString, long int keyTable,int NewOrChange,long int keyObject)
{
   WideString ConnStr;
   ConnStr =ConnString;
   FMaster->ADOConnection1->ConnectionString = ConnStr;
}


Так вот после использования библиотеки начинаются проблемы.
Например:
Код: plaintext
1.
2.
if (MyQuery->Active) MyQuery->Active = false;
  MyQuery->SQL->Clear();
  MyQuery->SQL->Add( "select field1,field2 from table1" );


Так вот когда делая Add() возникает ошибка:
Access violation at address ...
Видимо внутри библиотеки я неправильно работаю с указателем и поэтому возникают такие глюки.
...
Рейтинг: 0 / 0
Из WideString в char* и обратно.
    #32280560
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опечатка:

Код: plaintext
else MessageDlg( "Неудалось загрузить библиотеку \" mas.dll\ "." ,mtError, TMsgDlgButtons() << mbOK,  0 );
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Из WideString в char* и обратно.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]