powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача строк в COM-DLL
9 сообщений из 9, страница 1 из 1
Передача строк в COM-DLL
    #40033208
sdsfy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всех с наступившим!

Проблема возможно классическая и, вероятно, имеет простое решение, которое, надеюсь, подскажите.

Имеем COM-Obj засунутый в DLL и приложение. Все написано на Delphi. Причем Сервер на D10.3, на D2007.

Вот реализуемый интерфейс

Код: pascal
1.
2.
3.
4.
5.
6.
IMethodManage_1 = interface
    ['{1851DAC2-0450-4CD4-B988-816EC0820A99}']
    function SetParams(main_id, Emp_Id, Tex_Id: Integer) : Integer; stdcall;
    function SetDBParams(DBName, DBUserName, DBUserPassWord: PChar) : Integer; stdcall; //
    function RunTest(var Res: Integer): Integer; stdcall; //
end; //


Так вот, строки по следующей функции не доходят.

Код: pascal
1.
2.
    IMethodManage_1 = interface
    function SetDBParams(DBName, DBUserName, DBUserPassWord: PChar) : Integer; stdcall; //



Но, стоит этот COM вызвать из клиента написанного на D10.3 и все OK.
Я понимаю, что проблема кроется в переходе Delphi на Unicode с версии D2009, но не понимаю какие конвертации применить, чтоб эту задачку решить.
...
Рейтинг: 0 / 0
Передача строк в COM-DLL
    #40033209
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdsfy
Так вот, строки по следующей функции не доходят.

Не хотите ли показать, как их посылаете?

P.S. Вангую, что надо заменить string на AnsiString.
...
Рейтинг: 0 / 0
Передача строк в COM-DLL
    #40033210
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdsfyне понимаю какие конвертации применить, чтоб эту задачку решить.

Заменить в интерфейсе PChar на OleStr. Пересобрать сервер и клиент.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Передача строк в COM-DLL
    #40033219
sdsfy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer,

вот это самое из клиента на d10.3, до COM доходит все, и так и этак засунутое в качестве параметра.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
var
  dbname: pchar;
  ansistr: pansistring;
begin
  ansistr := Pansistring(DBNameEdit.Text);
  dbname := pchar(ansistr);
  ITest1.SetDBParams(dbname, pChar(DBUserNameEdit.Text), pChar(DBUserPassEdit.Text));
...
Рейтинг: 0 / 0
Передача строк в COM-DLL
    #40033223
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdsfy
вот это самое из клиента на d10.3, до COM доходит все, и так и этак засунутое в качестве параметра

Не удивительно. Потому что там Edit.Text имеет тип AnsiString, и все эти в пользу бедных приведения указателей ничего не меняют.

P.S. Не пробовал, но на глаз Дмитрий выше дал хороший совет.
...
Рейтинг: 0 / 0
Передача строк в COM-DLL
    #40033230
sdsfy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarer
sdsfy
вот это самое из клиента на d10.3, до COM доходит все, и так и этак засунутое в качестве параметра

Не удивительно. Потому что там Edit.Text имеет тип AnsiString, и все эти в пользу бедных приведения указателей ничего не меняют.

P.S. Не пробовал, но на глаз Дмитрий выше дал хороший совет.


Возможно, стоит попробовать.
Но как понимаю, PChar передает указатель на строку, которая должна как-то просто перекодироваться видимо в UNICODE на стороне COM. Но вот как?
Попытки присвоить переменным типа string с приведением типов не работают.
...
Рейтинг: 0 / 0
Передача строк в COM-DLL
    #40033237
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdsfy,

Проблема у тебя в том, что до D2009 PChar = PAnsiChar, а начиная с D2009 PChar = PWideChar. Поэтому решения может быть два:
1. Заменить PChar на конкретный тип: PAnsiChar или PWideChar.
2. Заменить PChar на тип WideString (OleStr это псевдоним данного типа). Это системный строковый тип.

Второй вариант лучше.
...
Рейтинг: 0 / 0
Передача строк в COM-DLL
    #40033238
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdsfy
Но как понимаю, PChar передает указатель на строку

PChar передаёт указатель, про который Вы поклялись мамой, что это указатель на 0-терминированную последовательность char-ов. При этом у Вас сервер и клиент понимают под char-ом разные вещи, а Вы плохо ориентируетесь в происходящем, шаманите наугад и Ваша клятва оказывается ложной.

Ещё раз - Дима дал хороший совет. Обойдитесь без ненужных сложностей, используйте стабильный тип данных, одинаковый для любого клиента.
...
Рейтинг: 0 / 0
Передача строк в COM-DLL
    #40033259
sdsfy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, действительно, все оказалось просто.
Спасибо коллеги. Еще раз с новым годом!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Передача строк в COM-DLL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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