|
|
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
Вобщем дело в следующем, одна софтина имеет DCOM, один из методов которого возвращает VARIANT v, что есть ClientDataSet->Data так как под эту софтину, все пишут в делфях, то у них не возикает фопросов о присвоении на свой клиентдатасет, типа Код: ClientDataSet1.Data := v; и все пркрасно, однако если писать в билдере, ведь ClientDataSet->Data этоже OleVariant, и если сделать вот так Код: ClientDataSet1->Data = (OleVariant)v; то будет ругань в библиотеке utilcls.h access violation тра ля-ля на выходе функции Код: TVariantT(const VARIANT& src) { /* always copies the other variant. */ ::VariantInit(this); ::VariantCopy(this, const_cast<VARIANTARG*>(&src)); } А если сделать, что то типа Код: ClientDataSet1->Data = v.parray; то выдется эксепшеновое Invalid Data Packet что-то мне подсказывает что надо с помощью SAFEARRAY мутить, но все равно не пойму как. Кто-нить чё-нить может сказать по этому поводу ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2005, 12:11 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
http://www.rsdn.ru/article/com/varsafearr.xml#XSLTPART139120120 ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.05.2005, 11:21 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
спасибо большое что ответили, вы единственный во всем нете.. все это очень хорошо, но ничего особо нового я не прочитал, таак.. перевод английских мануалов по АПИ.. вопрос вот в чем, метод DCOM, возвращает VARIANT, и в документации написано что это мол самый что ни на ечть Delphi' ский ClientDataSet.Data или ClientDataSet.XMLData (не суть важно). Так вот отрабатывает этот метод и в VARIANT *v: v->vt = 0x2011 то есть VT_SAFEARRAY + какая-то еще хрень пишем дальше SAFEARRAY *sa = new SAFEARRAY; sa = var->parray; в результате *sa: { 65262, 65262, 4277075694, 4277075694, :FEEEFEEE, {4277075694, -17891602}} что за инвалидство?? и еще раз повторяю ГЛАВНЫЙ вопрос, что за эксепшеновые ошибка "Invalid Data Packet" или "Mismatch in Data Packet" вылазиющие всякий раз при попытке TClientDataSet1->Data = v; // v->parray; ??????? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 10:54 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 2. Попробуй по частям: - проверить тип варианта переменной v - получить/скопировать её в другой участок памяти, сначала разблокировав vararray - посмотреть размер массива в Delphi и на С++ ...... ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 13:52 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
не для твоего случая но может поможет Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 13:58 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. вот это мне не ясно, это что вообще такое? почему 7000??? зачем это все надо? что такое у вас там в ващем объектом паскале ^ ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 14:19 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
задача - получить с сервера DataSet из BLOB (там записан байтовый массив - например exe/doc/tiff) - объявляем тип перемнной массив байт 0....7000 - PArrayData - указатель на него. Код: plaintext Код: plaintext 1. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 14:33 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
ты все понимаешь правильно, да, надо бинарные данные скопировать, но не получается!!! пишу так Код: plaintext 1. 2. опять эксепшн появляется, пишет Invalid Argument ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 14:44 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
tokitoты все понимаешь правильно, да, надо бинарные данные скопировать, но не получается!!! пишу так Код: plaintext 1. 2. опять эксепшн появляется, пишет Invalid Argument Ну надо Сишников спросить. 2. Попробуй по частям - самому сделать массив вариант - varArrayCreate Код: plaintext - ругается на какой параметр - слева или справа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 15:27 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
ещё раз говорю - есть функция проверки типа твоего var. Если тип не массив, то будет ругаться. Например на сервере поле BLOB и поле Код: plaintext 1. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 15:31 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
откуда ж я знаю на какой параметр ругань - это ж exception !! вот, вот, как бы нам сишников в диалог привлечь? в любом случае вам огромное спасибо, и за отзывчивость в том числе, редкое качество в нете! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 15:33 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
откуда ж я знаю на какой параметр ругань - это ж exception !!========== когда формулу разобьёте на части (подставляя заведомо правильные параметры), тогда узнаете. вот, вот, как бы нам сишников в диалог привлечь? ============ Вы и сами сможете, тока Трудится надо! И отвечать на все вопросы а не на часть из них. в любом случае вам огромное спасибо, и за отзывчивость в том числе, редкое качество в нете! ========= не за что, просто есть ветки более живые и ответов там больше (ни в коем случае не камень в огород). ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 16:33 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
интересно как я тебе вот эту формулу разобью на части?? Код: plaintext 1. живые темы.. гы.. весьма забавно почитать про всякую ерунду порой, но меня интересует конкретный вопрос, здесь и сейчас, решение которого "тыканьем" разных аргуметов меня не впечатляет. вы упорно закрывает глаза на то о чем я вас спрашиваю !!! ЧТО ТАКОЕ ИНВАЛИД ДАТА ПАКЕТ !!! для того чтобы что-то хорошо делать нужно понимать что ты делаешь! вас в школе учили вообще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2005, 18:45 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
авторинтересно как я тебе вот эту формулу разобью на части?? вместо DataSet создать свю собственную var-массив-переменную. ЗЫ. Без труда не выловишь рыбки из пруда. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 14:02 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
авторменя интересует конкретный вопрос, здесь и сейчас, решение которого "тыканьем" разных аргуметов меня не впечатляет. я заметил ). IMHO не заниматься программированием с такими заявлениями. Удачи! ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 14:05 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
Попробуй просто pp = VarArrayLock(var); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 15:45 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
То есть я имел ввиду не запрашивай память через new a char *pp = VarArrayLock(var); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 16:06 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
AndreiNzТо есть я имел ввиду не запрашивай память через new a char *pp = VarArrayLock(var); конечно, думаю что память не должна быть распределена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 16:44 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
VarArrayLock тут вобще не при делах, спасибо AndreiNz но все не в кассу. короче объективный вывод: мы все лохи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 21:33 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
Попробуй еще следующее: ClientDataSet1->Data = **OleVariant(v).pparray; А вообще, большую роль играет то, как ругается компилятор, я имею ввиду дословно и на каккой комнде возникает ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 22:50 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
Или еще: ClientDataSet->Data.vt = VT_EMPTY; hres = VariantCopy(&ClientDataSet->Data, &v); кстати проверь, что есть ClientDataSet->Data. Если это функция, возвращающая ссылку типа: Variant &ClientDataSet->Data(); то надо использовать скобки ClientDataSet->Data().vt = VT_EMPTY; hres = VariantCopy(&ClientDataSet->Data(), &v); Если же это просто public Vararay то скобки не нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2005, 23:03 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
Андрей, на все твои предположения ругается компилятор. У меня же ругань не компилятора, а эксепшн winmain'а в блоке try { Application->Initialize(); Application->CreateForm(__classid(TForm1), &Form1); Application->Run(); } ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2005, 09:36 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
Я думаю, что сама идея ClientDataSet1->Data = v.parray; была правильной, только ты рередешь не то в v.parray; Или указатель вместо объекта или наоборот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 12:52 |
|
||
|
olevariant и variant
|
|||
|---|---|---|---|
|
#18+
AndreiNzЯ думаю, что сама идея ClientDataSet1->Data = v.parray; была правильной, только ты рередешь не то в v.parray; Или указатель вместо объекта или наоборот. а мне кажется с такими темпами и ленью (до сих пор нет ответа на вопрос - какой тип варианта получаешь в переменной вариант) челу проще на Delphi писать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.06.2005, 13:17 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=33097294&tid=2033185]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
70ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
80ms |
get tp. blocked users: |
2ms |
| others: | 245ms |
| total: | 450ms |

| 0 / 0 |
