|
|
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
Добрый день. Как правильно объявить такую структуру через динамический массив? Код: plaintext 1. 2. 3. 4. 5. 6. ppObjectArray : A pointer to an array of IUnknown interfaces. The size of this array MUST be equal to celt. If successfully completed, it receives an array of the IUnknown interfaces of the next objects in the enumeration; the number of elements in this array MUST be equal in size to the value of pcFetched. Callers MUST release each IUnknown interface that is received. Варианты: Код: pascal 1. 2. Т.к. динамический массив же сам вроде указатель? А здесь, как я понимаю, функция память не выделяет, а просто заполняет массив значениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 16:39 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
alekcvp, ни "a", ни "b" неправильны - открытые массивы это дельфи-specific А этот интерфейс и так описан - стандартный перечислитель для объектов автоматизации alekcvpпросто заполняет предоставленный массив значениямиабсолютно точно можно записать абсолютно равноценно, вот так Код: pascal 1. или так Код: pascal 1. Кроме того, в поставке дельфи есть автоматический импортёр библиотек типов. idl-ку из которой вы это взяли компилите в tbl-ку, а с неё уже импортируете ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 16:54 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)alekcvp, А этот интерфейс и так описан - стандартный перечислитель для объектов автоматизации А как он называется и в каком модуле? kealon(Ruslan)alekcvpпросто заполняет предоставленный массив значениямиабсолютно точно можно записать абсолютно равноценно, вот так Код: pascal 1. И как потом перечислять элементы?.. kealon(Ruslan) Кроме того, в поставке дельфи есть автоматический импортёр библиотек типов. idl-ку из которой вы это взяли компилите в tbl-ку, а с неё уже импортируетеЯ это взял из docs.microsoft.com, как и откуда импортировать я не знаю :( На C++ это всё описано в стандартных заголовочных файлах, которые отдельно даже в гугле хрен найдёшь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 17:00 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
alekcvpКак правильно объявить такую структуру через динамический массив? Никак, обломись. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 17:01 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)пропущено... абсолютно точно можно записать абсолютно равноценно, вот так Код: pascal 1. А самое главное - как в такой записи предварительно выделить память для, например, 10 элементов?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 17:02 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovalekcvpКак правильно объявить такую структуру через динамический массив? Никак, обломись. Почему нет-то? Динамический массив же - это, по-факту, указатель на обычный массив в памяти, а вся "магия компилятора" спрятана в нём по отрицательным смещениям и не видна, при условии что память выделяется и освобождается в Delphi. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 17:04 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
alekcvpпри условии что память выделяется и освобождается в Delphi. И вот это-то условие в твоём случае и не соблюдается. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 17:12 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakovalekcvpпри условии что память выделяется и освобождается в Delphi. И вот это-то условие в твоём случае и не соблюдается. Ммм? ppObjectArray: A pointer to an array of IUnknown interfaces. The size of this array MUST be equal to celt. If successfully completed, it receives an array of the IUnknown interfaces of the next objects in the enumeration; the number of elements in this array MUST be equal in size to the value of pcFetched. Callers MUST release each IUnknown interface that is received.Разве выделенная часть не означает, что память выделяет приложение до вызова метода?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 17:15 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
alekcvpРазве выделенная часть не означает, что память выделяет приложение *до* вызова метода?.. Да. А предложение сразу после неё означает, что переменная получает указатель на память, выделенную где-то внутри. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 17:22 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovДа. А предложение сразу после неё означает, что переменная получает указатель на память, выделенную где-то внутри. https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-vds/8e48f231-3fb6-4f15-ace6-a0ba244cb5f1 The server MUST perform the following: If the number of objects from the current index to the end of the enumeration is greater than or equal to the number of objects being requested in celt: Populate the IUnknown pointers in ppObjectArray with the next IUnknown pointers (the amount of which celt specifies) in the enumeration that is starting from the current index. Как я понимаю, он копирует адреса объектов в ячейки предоставленного массива, а не подменяет его своим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 17:25 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
такая идея: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 17:29 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
alekcvpКак я понимаю, он копирует адреса объектов в ячейки предоставленного массива, а не подменяет его своим. Ну, если так, то первый вариант должен сработать по идее. Возьми и проверь. Но будет засада с compiler magic и счётчиком ссылок. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 17:31 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
а так, разве параметр с массивом не типа PSafeArray должен быть? тогда мой код из примера на помойку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 17:36 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
Кроик Семёнтакая идея: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. А разве это pArr не то же самое [для вызова функции] что и ниже? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 17:36 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
я не выделяю память под массив я просто пермещаю указатель (pArr) на начало какого-то блока в памяти и работаю с этим блоком как будто там массив из не более 10000 элементов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 17:41 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
Кроик Семёня не выделяю память под массив я просто пермещаю указатель (pArr) на начало какого-то блока в памяти и работаю с этим блоком как будто там массив из не более 10000 элементов Ну память-то под этот блок всё равно где-то надо будет выделять. А проще SetLength() только статический массив, но его большим не сделаешь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 19:29 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
alekcvpkealon(Ruslan) Кроме того, в поставке дельфи есть автоматический импортёр библиотек типов. idl-ку из которой вы это взяли компилите в tbl-ку, а с неё уже импортируетеЯ это взял из docs.microsoft.com, как и откуда импортировать я не знаю :( На C++ это всё описано в стандартных заголовочных файлах, которые отдельно даже в гугле хрен найдёшь.ставите SDK от микрософта (можно установить вместе со студией) idl-ки будут здесь: Код: plaintext вообще целый класс таких интерфейсов есть в Winapi.ActiveX, см например IEnumUnknown ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 19:37 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
alekcvp, и совет: прежде, чем интерфейс пытаться самому достать проходиться поиском по исходникам в дельфи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 19:40 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)alekcvp, и совет: прежде, чем интерфейс пытаться самому достать проходиться поиском по исходникам в дельфиСпасибо, кэп. 'IEnumVdsObject' не находит ничего (в моей версии по крайней мере). kealon(Ruslan)ставите SDK от микрософта (можно установить вместе со студией) idl-ки будут здесь: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2019, 21:57 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
alekcvpkealon(Ruslan)ставите SDK от микрософта (можно установить вместе со студией) idl-ки будут здесь: Код: plaintext в SDK или студию входит тулза, как-то так Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2019, 00:08 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
alekcvpКроик Семёня не выделяю память под массив я просто пермещаю указатель (pArr) на начало какого-то блока в памяти и работаю с этим блоком как будто там массив из не более 10000 элементов Ну память-то под этот блок всё равно где-то надо будет выделять. А проще SetLength() только статический массив, но его большим не сделаешь. Я почти на 100% уверен, что библиотека имеет функции для выделения памяти под буфер и под его освобождение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2019, 00:38 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
И чего вы мудрите, массивы они и в Африке массивы. Если задача в объявлении, то либо pointer to pointer to IUnknown (и элементы извлекать через Inc), как в оригинале, либо pointer to array[0..maxint] of IUnknown. Если задача в вызове, то любой Delphi массив прокатит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2019, 10:33 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
Что вы извращаетесь? Код: pascal 1. 2. 3. 4. или Код: pascal 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2019, 12:14 |
|
||
|
Указатель на массив С++ => Delphi
|
|||
|---|---|---|---|
|
#18+
Короче подумал и, в итоге, сделал Код: pascal 1. потому что так универсальнее - можно и любой массив передавать и единичный интерфейс, при необходимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2019, 14:27 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39880609&tid=2038904]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
155ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 453ms |

| 0 / 0 |
