|
|
|
Forum 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. Помогите.
|
|
|
|
|
Forum Member
      
участник
Last Login: 04.09.2007 19:56
Сообщ.: 42,
Visits: 337
|
|
DP0("start Convert(...)");
это сообщение не выводится в файл лога.
значит функа даже не начинает исполняться.
мистика...
|
|
|
|
|
Forum Member
      
участник
Last Login: 04.09.2007 19:56
Сообщ.: 42,
Visits: 337
|
|
Разобрался.
Реально в Convert() много наобъявлено статических многомерных массивов, а ограничение на стэк - 1 Мб.
Переписал код и теперь память под массивы беру из кучи - всё заработало.
|
|
|
|
|
Supreme Being
      
модератор
Last Login: 09.07.2008 2:17
Сообщ.: 1 298,
Visits: 12 500
|
|
|
|
|