powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / При вызове функции указатель на DLL = null.
7 сообщений из 7, страница 1 из 1
При вызове функции указатель на DLL = null.
    #38618044
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеем класс A
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
class A
{
DLLLib  oDll = new DLLLib; //цепляемся к DLL
B B1; //определяем класс B

A() //конструктор А
{
...
B1= new B(<параметры>, this) //Это чтобы B мог вызывать методы A
...
GetData();// VS сообщает, что oDll=null. Финита.
} // end конструктор

//получение данных от DLL
void GetData()
{
oDll. SomeFunc();
}
//получение данных от DLL
void GetDataB()
{
oDll. SomeFunc2();
}

}//end class


Теперь класс B
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class B
{
A  A2;
B(<параметры>, A obj) //конструктор B
{
A2=obj;
//запрос данных конфигурации у DLL через класс A
A2.GetDataB(); // отрабатывает нормально!! См. класс А GetData()

}

}


При этом, функции класса А не связанные с запросом к DLL отрабатывают нормально.
Если в B закомментировать вызов A2.GetData2(), то далее A и все остальные объекты отрабатывают штатно.
Собственно, пока в кл.В больше ничего и нет. Только начал писать.

"Есть многое на свете, друг Горацио, что и не сразу в голову придет."
М. Твен "Приключения Геккельбери Финна"
...
Рейтинг: 0 / 0
При вызове функции указатель на DLL = null.
    #38618156
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сформулирую короче.
Класс А создает класс В и отправляет ему ссылку на себя для обеспечения обратного вызова функций. B1=new B(this).
Обратный вызов работает не всегда корректно и, иногда, заканчивается полным отказом программы.
Необходимо обеспечить В надежный обратный вызов методов и пр. из А.
...
Рейтинг: 0 / 0
При вызове функции указатель на DLL = null.
    #38618160
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,

общий совет - не делай в конструкторах обращений к DLLLib,
только настройку ссылок
...
Рейтинг: 0 / 0
При вызове функции указатель на DLL = null.
    #38618181
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилобщий совет - не делай в конструкторах обращений к DLLLib,
только настройку ссылокЯ не знаю как это сделать. Это как собака кусающая себя за хвост.
Я не могу выйти из конструктора (основного потока), пока не запущу потоки. И не могу запустить потоки, пока не прочитаю данные через DLL и не создам объект (класс) В .
Кстати, класс А беспроблемно отрабатывает взаимодействие с DLL из конструктора. Суммарно, наверное с мегабайт оттуда читает. Это оставляем без изменений.
...
Рейтинг: 0 / 0
При вызове функции указатель на DLL = null.
    #38618183
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YUBA,

вынеси из конструкторов инициализацию - станет прозрачнее.

Есть уверенность, что DLLLib поддерживает многопоточность?
...
Рейтинг: 0 / 0
При вызове функции указатель на DLL = null.
    #38618190
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил, думаю, не поддерживает, хотя, определенно неизвестно. При моем останове, приложение связанное с DLL тоже встает. В состояние - "не отвечает".
Хотя приложение многопоточное, но, судя по всему, мы влезаем в поток с наибольшим приоритетом.
С другой стороны, сейчас работают 4 события и 3 потока по событиям, + независимо, запрашиваются данные. Сбоев вообще не было. Все оч. шустро.
Однако, не пойму, с какого бодуна указатель на DLL в null соскакивает при вызове из B объекта. Там пока один поток - основной. Пока конструктор В не закончится дальше не пойдем.
...
Рейтинг: 0 / 0
При вызове функции указатель на DLL = null.
    #38619168
YUBA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задачка решена, хотя полной уверенности в победе нет.
Таким образом.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
class A
{
DLLLib  oDll = new DLLLib; //цепляемся к DLL
B B1; //определяем класс B

A() //конструктор А
{
...
B1= new B(<параметры>, this, oDll); //Это чтобы B мог вызывать методы A, а теперь и обратиться из В непосредственно к DLL через 


Класс В
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
class B
{
A  A2;
DLLLib oDLL
B(<параметры>, A obj, DLLLib obj2) //конструктор B
{
A2=obj;
oDLL =obj2;
//обращаемся непосредственно к DLL.
oDLL. SomeFunc2();; // отрабатывает нормально и указатель oDll класса А после вызова в null не уходит.


Ниче не понял, в смысле, почему в 1-м варианте не работало.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / При вызове функции указатель на DLL = null.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]