Взаимодействие VB и VCPP.
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Взаимодействие VB и VCPP. Expand / Collapse
Автор
Сообщение
01.09.2007 2:01
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 04.09.2007 19:56
Сообщ.: 42, Visits: 337
Взаимодействие VB и VCPP.

VB60 и VCPP50.

Помогите решить проблемку. Есть VB проект и dll на плюсах.
Всё бы хорошо и всё работало, пока не появилась проблемка. Очередная новая функа в dll виснет глушняком! Хэлп!
Повторяю, dll писать умею, уже много функций работает, а вот тут засада.

Итак. Вот код на VB.

Public Sub PaintMap()
Dim b As String: b = String(2000000, 0)
Dim C As Long, i As Long
Dim x As Long, y As Long

If OptionMapSize(0).Value = True Then
C = 20
Else
C = 45
End If
MsgBox "calling FM"
FillMap C, b, 1, Lang
MsgBox b ‘ сюда уже не попадаем, FillMap висит !!!!!!!!!!!!!
MsgBox "FM done"
i = 1
Gmap.ScaleMode = 3
Gmap.AutoRedraw = True
For y = 0 To 299
For x = 0 To 299
C = 1
i = i + 1
Gmap.PSet (x, y), C
Next x
Next y
Gmap.AutoRedraw = False
End Sub

В VB прототип описан как
Public Declare Sub FillMap Lib "gsup.dll" (ByVal countries As Long, ByVal b As String, ByVal names As Long, ByVal language As Long)

А кот код функи в dll.

EXPORT void __stdcall
FillMap(UINT32 C, UBYTE8 *buf, UINT32 names, UINT32 lang)
{
MAP map(20);
buf[0] = 'H';
buf[1] = 'B';
//return; если тут раскомментарить. то всё OK! Есть воздействие на бэйсик, но мне то надо, чтобы buf передался в Convert и был заполнен там!!!!!!!!!!!!!!!!
DP0("FM:0");// это функа отладочной печати
map.SetC(C);
DP0("FM:1");
map.UnpackMap(msg.map);
DP0("FM:2");
map.Convert(NULL, buf, names, lang); // вот тут зависон! Трёшка из следующей строчки никогда не печатается.
DP0("FM:3");
}

А вот что такое Convert. Вообще-то, функа – бетон, вне dll – работает на ура, а тут даже не хрюкает. Полная смерть. Смотрите сами. Вариант обрезанный, но и он виснет, на печать ничего не выходит. Что делать?

void
MAP::Convert(BYTE8 *fn, UBYTE8 *buf, UINT32 names, UINT32 l)
{
DP0("start Convert(...)");
buf[2] = 'L';
buf[3] = 'M';
return;
}

Даже непонятно, где вообще зависон происходит. Наверное, я чего-то не знаю про dll. Помогите.
Сообщ. #915693
01.09.2007 2:03
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 04.09.2007 19:56
Сообщ.: 42, Visits: 337
DP0("start Convert(...)");
это сообщение не выводится в файл лога.
значит функа даже не начинает исполняться.
мистика...
Сообщ. #915694
04.09.2007 19:59
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 04.09.2007 19:56
Сообщ.: 42, Visits: 337
Разобрался.
Реально в Convert() много наобъявлено статических многомерных массивов, а ограничение на стэк - 1 Мб.
Переписал код и теперь память под массивы беру из кучи - всё заработало.
Сообщ. #915763
05.09.2007 11:25
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 09.07.2008 2:17
Сообщ.: 1 298, Visits: 12 500
молодец! :)
Сообщ. #915768
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 7:17