Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Как в delhhi XE3 считать строку из dll, написанной на delphi 2007  [new]
ziv-2014
Member

Откуда:
Сообщений: 342
Ural2,
Используй widestring!
21 апр 19, 11:33    [21868110]     Ответить | Цитировать Сообщить модератору
 Re: Как в delhhi XE3 считать строку из dll, написанной на delphi 2007  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3543
Ural2,

Дико грязный хак:
ds_name := TEncoding.Default.GetString(TBytes(Pointer(ds.Name)));


Более цивилизованный способ:
type

 TEncodingHelper = Class Helper For TEncoding

  Function GetString(ABytes : PByte; ACount : Integer) : String;

 End;

{ TEncodingHelper }

Function TEncodingHelper.GetString(ABytes : PByte; ACount : Integer) : String;
Var

 Count : Integer;

Begin

 Result := '';

 If Assigned(ABytes) Then
  Begin

   Count := GetCharCount(ABytes, ACount);

   SetLength(Result, Count);
   GetChars(ABytes, ACount, Pointer(Result), Count);

  End;

End;

...

ds_name := TEncoding.Default.GetString(Pointer(ds.Name), Length(ds.Name));
21 апр 19, 11:55    [21868122]     Ответить | Цитировать Сообщить модератору
 Re: Как в delhhi XE3 считать строку из dll, написанной на delphi 2007  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47659

Ural2
Получаю из dll 2007 массив из указателей на DataSets

Обломись без вариантов. Передача объектов между рантаймами разных версий невозможна.

Posted via ActualForum NNTP Server 1.5

21 апр 19, 12:26    [21868132]     Ответить | Цитировать Сообщить модератору
 Re: Как в delhhi XE3 считать строку из dll, написанной на delphi 2007  [new]
rgreat
Member

Откуда:
Сообщений: 5070
Dimitry Sibiryakov
Обломись без вариантов. Передача объектов между рантаймами разных версий невозможна.
Не то что бы невозможна. Возможно, но это будут объекты несовместимые с новыми.
21 апр 19, 12:35    [21868137]     Ответить | Цитировать Сообщить модератору
 Re: Как в delhhi XE3 считать строку из dll, написанной на delphi 2007  [new]
Ural2
Member

Откуда:
Сообщений: 58
[quot Kazantsev Alexey]Ural2,

Дико грязный хак:
ds_name := TEncoding.Default.GetString(TBytes(Pointer(ds.Name)));


Это сработало! Попробую теперь данные из DS прочитать.
Спасибо!
21 апр 19, 12:52    [21868147]     Ответить | Цитировать Сообщить модератору
 Re: Как в delhhi XE3 считать строку из dll, написанной на delphi 2007  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47659

Ural2
Это сработало!

Ага, привет, утечки памяти, её порча уже не за горами.

Posted via ActualForum NNTP Server 1.5

21 апр 19, 12:53    [21868148]     Ответить | Цитировать Сообщить модератору
 Re: Как в delhhi XE3 считать строку из dll, написанной на delphi 2007  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3543
Dimitry Sibiryakov
Ага, привет, утечки памяти

Конкретном в этом месте утечек не будет.
21 апр 19, 13:16    [21868161]     Ответить | Цитировать Сообщить модератору
 Re: Как в delhhi XE3 считать строку из dll, написанной на delphi 2007  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47659

Kazantsev Alexey
Конкретном в этом месте утечек не будет.

ds версии 2007 возвращает Name как AnsiString со счётчиком ссылок равным 2. RTL XE3
обращается с полученным указателем как с UnicodeString без счётчика ссылок и освобождает
занимаемую ею память после использования. Я не хотел бы отлаживать эту кашу.

Posted via ActualForum NNTP Server 1.5

21 апр 19, 13:32    [21868165]     Ответить | Цитировать Сообщить модератору
 Re: Как в delhhi XE3 считать строку из dll, написанной на delphi 2007  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3543
Dimitry Sibiryakov
ds версии 2007 возвращает Name как AnsiString со счётчиком ссылок равным 2. RTL XE3
обращается с полученным указателем как с UnicodeString без счётчика ссылок и освобождает
занимаемую ею память после использования

Ты код посмотри, там нет прямого копирования строк (Name - свойство без геттера).
21 апр 19, 13:37    [21868169]     Ответить | Цитировать Сообщить модератору
 Re: Как в delhhi XE3 считать строку из dll, написанной на delphi 2007  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 47659

Kazantsev Alexey
Ты код посмотри, там нет прямого копирования строк (Name - свойство без геттера).

Именно поэтому оно возвращает непосредственно указатель FName, увеличивая его счётчик ссылок.

Posted via ActualForum NNTP Server 1.5

21 апр 19, 13:53    [21868181]     Ответить | Цитировать Сообщить модератору
 Re: Как в delhhi XE3 считать строку из dll, написанной на delphi 2007  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3543
Dimitry Sibiryakov
Именно поэтому оно возвращает непосредственно указатель FName, увеличивая его счётчик ссылок.

Ничего оно не увелчивает. Счетчик увеличивается при копировании. Здесь копирования нет, делается чтение по адресу.
21 апр 19, 14:03    [21868186]     Ответить | Цитировать Сообщить модератору
 Re: Как в delhhi XE3 считать строку из dll, написанной на delphi 2007  [new]
Ural2
Member

Откуда:
Сообщений: 58
rgreat
Dimitry Sibiryakov
Обломись без вариантов. Передача объектов между рантаймами разных версий невозможна.
Не то что бы невозможна. Возможно, но это будут объекты несовместимые с новыми.

Да, DataSet-ы я получила, но делать с ними ничего не могу...
    TableView1.BeginUpdate();
    TableView1.ClearItems;
    DataSource1.DataSet:=TDataSet(A_ds[i]);   // здесь Access Violation
    TableView1.DataController.DataSource:=DataSource1;
    TableView1.DataController.CreateAllItems;
    TableView1.EndUpdate;

Неужели сдаваться?..
21 апр 19, 14:24    [21868196]     Ответить | Цитировать Сообщить модератору
 Re: Как в delhhi XE3 считать строку из dll, написанной на delphi 2007  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3543
Ural2,

Прокладочку писать...
21 апр 19, 14:30    [21868198]     Ответить | Цитировать Сообщить модератору
 Re: Как в delhhi XE3 считать строку из dll, написанной на delphi 2007  [new]
shonli95
Member

Откуда:
Сообщений: 85
function AnsiStringToPAnsiChar(Str: AnsiString): PAnsiChar;
begin
  Result := PAnsiChar(Str);
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  Test: AnsiString;
  ToValue: PAnsiChar;
begin
  Test := 'Ansi Test String';
  ToValue := AnsiStringToPAnsiChar(Test);
  ShowMessage(ToValue);
end;



 Result := PAnsiChar(Str);
 mov eax,[ebp-$04]
 call @LStrToPChar
 mov [ebp-$08],eax
21 апр 19, 15:40    [21868231]     Ответить | Цитировать Сообщить модератору
 Re: Как в delhhi XE3 считать строку из dll, написанной на delphi 2007  [new]
L1G
Member

Откуда:
Сообщений: 102
Ural2, т.к. у вас уже есть решение через файлы - просто переделайте их на memory mapped (mmf)
http://delphikingdom.com/asp/viewitem.asp?catalogid=513
22 апр 19, 01:31    [21868426]     Ответить | Цитировать Сообщить модератору
 Re: Как в delhhi XE3 считать строку из dll, написанной на delphi 2007  [new]
Василий 2
Member

Откуда:
Сообщений: 606
Как все запущено... возврат VCL объектов из DLL... только "прокладка", иначе загадочных глюков не оберешься. Причем вылезать будут в самых неожиданных моментах.
22 апр 19, 10:55    [21868615]     Ответить | Цитировать Сообщить модератору
 Re: Как в delhhi XE3 считать строку из dll, написанной на delphi 2007  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 10998
Kazantsev Alexey
Прокладочку писать...
Не взлетит. Ты код видел?
Ural2
DataSource1.DataSet:=TDataSet(A_ds[i]);
Если бы работа шла только с DataSet можно было бы проложить интерфейс. А она хочет его подключить к DataSource и, как я понимаю, еще и отобразить на каком-то DBControl.

Т.е. это в прокладке нужно экспортировать какой-нибудь интерфейс IDataSet, а потом в основной программе писать своего наследника TDataSet, который бы поднимал данные из этого интерфейса. Удовольствие еще то
22 апр 19, 17:50    [21869141]     Ответить | Цитировать Сообщить модератору
 Re: Как в delhhi XE3 считать строку из dll, написанной на delphi 2007  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3543
_Vasilisk_,

У ТС уже есть работающая прокладка, просто нужно переделать выгрузку в файлы на выгрузку в память.
22 апр 19, 18:02    [21869158]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Delphi Ответить