Проблема с функцией обратного вызова (Callback).
Я пользуюсь некой DLL через Declare. Эта DLL требует инициализации и передаче ей указателя на мою Callback-функцию (на VB), которую эта DLL будет дергать в неопределенные моменты. Пока все ясно. Проблема в том, что я не могу размещать внутри моей Callback-функции никакие вызовы других функций с передачей аргументов. ИНаче при вызове из-под DLL происходит крах всего на свете. Если же внутри моей функции только обращение к переменным и вызовы без передачи аргументов, то все нормально. У меня такое впечатление, что дело в подмене стека вызовов. Типа, во время вызова из-под DLL в регистре SP (или как он там называется) содержится указатель на стек другого процесса. Хотя, я в этом не силен. Вроде, DLL должна пользоваться стеком родительского процесса. В общем, не пойму, как лечить.
Дополнительно сообщю, что DLL написана не мной на С++, публичные вызовы по StdDecl.
Вот в сильно упрощенном виде код:
- Код: Выделить всё
' Здесь я объявляю функцию инициализации DLL
Public Declare Function init_DLL Lib "XXX.dll" (ByVal CallbackFunc As Long) As Long
' Это типа точка входа
Public Sub Main()
' Инициирую DLL с передачей ей указателя на мою Callback-функцию
init_DLL(AddressOf CallbackFunc)
End Sub
' А вот и сама Callback-функция в соответствием с требованием DLL
Public Function CallbackFunc(ByVal param1 As Long, ByVal param2 As Long) As Long
' невозможно делать никаких вызовов, требующих передачи аргументов
End Function