DdeClientTransaction - Subscript out of range

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

DdeClientTransaction - Subscript out of range

Сообщение Alexanbar » 14.08.2005 (Вс) 16:01

Из Приложения вызывается Activex.Dll, содержащая форму и Listview на ней.

В этой форме есть такой код:
Private Sub LvwJobs_DblClick()
...
rz = DdeInitialize(idInst, AddressOf DdeCllback, 0, 0)
hszVBServer = DdeCreateStringHandle(idInst, VBServerName, CP_WINANSI)
hszVBTopic = DdeCreateStringHandle(idInst, VBTopicName, CP_WINANSI)
hConv& = DdeConnect(idInst, hszVBServer, hszVBTopic, ByVal 0&)

If hConv Then

DataBuf = StrConv(LvwJobs.SelectedItem.text, vbFromUnicode)

Ub& = UBound(DataBuf)
Lb& = LBound(DataBuf)
DdeClientTransaction DataBuf(Lb), Ub - Lb + 1, hConv, hszItem&, CF_TEXT, XTYP_EXECUTE, 0, 0
DoEvents
DdeDisconnect hConv

end if
....

end sub



Соотвественно, в Модуле Приложения есть ф-я AppDdeCallback:


Select Case wType
.....
case XTYP_EXECUTE
Buf_Len = DdeGetData(hData&, ByVal 0&, 0, 0)
ReDim IncomingBuf(0 To Buf_Len - 1)

Buf_Pointer = DdeGetData(hData, IncomingBuf(0), Buf_Len, 0)
adr$ = StrConv(CStr(IncomingBuf), vbUnicode)
Ret = DDE_FACK
DoEvents
...

end select


Всё работает, если запускаю проект Приложения и откомпилированную DLL.
Если компилирую Приложение, идёт ошибка "Subscript out of range", возникающая в ActiveX.Dll при вызове ф-и DdeClientTransaction.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 14.08.2005 (Вс) 21:10

Ну, вроде нашёл решение. Не очень оно мне нравится, но вроде работает:

в ф-ии AppDdeCallback нужно внести изменения:

while Buf_len=0
Buf_Len = DdeGetData(hData&, ByVal 0&, 0, 0)
doevents
wend


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 7

    TopList