подскажите как запаковать массив стр-р в VARIANT
От: Crucifier Казахстан  
Дата: 22.01.02 21:03
Оценка:
Такая вот беда на MS Visual С++ с передачей параметров из васика:

struct P2eCWOrderLineItem
{
long lItemID;
long lQuantity;
} P2eCWOrderLineItem;

struct P2eCrystalWaterOrder
{
long lCustomerID;
BSTR bstrTimeToShip;
BSTR bstrNotes;
VARIANT P2eCWOrderLineItem; // эта беда должна быть массивом если ставлю SAFEARRAY васик не понимает
} P2eCrystalWaterOrder;


interface ISendByEmail : IDispatch
{
[id(1), helpstring("method SendCrystalWaterOrder")] HRESULT SendCrystalWaterOrder([in,out] SAFEARRAY (P2eCrystalWaterOrder)* pOrder);
};

Как это дело протащить ? В реализации метода и клиенте ?
Клиент — VB 6.0, а он чего то не понимает, пробовал с SAFEARRAY он мне говорит не automation тип или чего то в этом духе.. Я сделал два параметра SAFEARRAY, вытащив из структуры P2eCWOrderLineItem- все вроде ок, но уже просто интересно как заставить это работать..

Заранее спасибо.
Re: подскажите как запаковать массив стр-р в VARIANT
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.01.02 22:51
Оценка:
Здравствуйте Crucifier.

Честно говоря надоело отвечать на один и тот же вопрос.

Воспользуйся поиском и почитай статьи по COM на этом сайте.

Вот тут например есть все, что тебе нужно http://www.rsdn.ru/article/?com/COMvs.xml
Автор(ы): Чистяков В.Ю.

Эта статья входит в цикл "COM vs. CORBA" и знакомит читателя с основами COM, начиная с интерфейса IUnknown
и заканчивая маршалингом, DCOM и COM+.
.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: подскажите как запаковать массив стр-р в VARIANT
От: Crucifier Казахстан  
Дата: 23.01.02 04:58
Оценка:
Я почитал, и все форумы просмотрел..))
Но вот что до меня в частности не доходит — когда я ставлю в
struct P2eCrystalWaterOrder

{
long lCustomerID;
BSTR bstrTimeToShip;
BSTR bstrNotes;
SAFEARRAY (P2eCWOrderLineItem ) *P2eCWOrderLineItem; //!
} P2eCrystalWaterOrder;


Васик чего-то не понимает, а когда VARIANT — из готовой DLL-ки после компиляции объявление
структуры P2eCWOrderLineItem вообще куда-то проподает, вроде как за не надобностью.
Вообщем в любом случае мне Васик не дает запустить метод в таком виде

HRESULT SendCrystalWaterOrder([in,out] SAFEARRAY (P2eCrystalWaterOrder)* pOrder);

Васика я не знаю — поэтому пробую писать так:

Dim P2Email As New PAGE2EMAILLib.SendByEmail
Dim LineArray(10) As P2eCWOrderLineItem
Dim LineElement() As P2eCWOrderLineItem
Dim Main(0) As P2eCrystalWaterOrder
Dim ptrMain() As P2eCrystalWaterOrder

For i = 0 To 10
LineArray(i).lItemID = i
LineArray(i).lQuantity = 1
Next
LineElement = LineArray

Main(0).lCustomerID = 2002
Main(0).bstrTimeToShip = "9:00"
Main(0).bstrNotes = "бла бла бла"
Main(0).pLineItemsArray = LineElement
ptrMain = Main
P2Email.SendCrystalWaterOrder ptrMain, LineElement

На что он говорит, что юзер тип — P2eCWOrderLineItem не определен.. Это в случае с VARIANTOM
Куда определение типа девается ?
Re[2]: подскажите как запаковать массив стр-р в VARIANT
От: Аноним  
Дата: 28.01.02 14:44
Оценка:
Здравствуйте Crucifier, Вы писали:
.
.
C>Куда определение типа девается ?

Насчет VC++ части пока ничего не скажу, а вот
В VB пользовательский тип надо объявлять явно, т.е
(разумеется, библиотека должна быть подключена)

Private Type P2eCWOrderLineItem
lItemID As Long
lQuantity As Long
End Type

Private Type P2eCrystalWaterOrder
lCustomerID As Long
bstrTimeToShip As String
bstrNotes As String
P2e() As P2eCWOrderLineItem
End Type

Dim P2eCr As P2eCrystalWaterOrder

Private Sub Form_Load()
ReDim P2eCr.P2e(10)
P2eCr.P2e(0).lItemID = 45
P2eCr.P2e(1).lItemID = 145

End Sub
Re[3]: подскажите как запаковать массив стр-р в VARIANT
От: Crucifier Казахстан  
Дата: 31.01.02 17:24
Оценка:
Здравствуйте Аноним,

Может вы хотели сказать можно ? а не нужно ?
Т.к. в бейсике как раз с этим и не возникает проблем))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.