powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
18 сообщений из 43, страница 2 из 2
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
    #39502316
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Я вот думаю, вычислять версию OS или м.б. надежнее полностью выкинуть эту CriticalSection и иди она лесом?
Сделай класс-обертку для управления. В конструктор передавай секцию, в методе enter() вход в секцию с контролем повторного вызова, в деструкторе освобождение секции.
В коде будет примерно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
{
    my_CS_lock lck(csRoute);
...
   if(...) {
      lck.enter();
      ...
   }
...
} // тут деструктор освободит csRoute


Если компилятор поддерживает С++ 11, то можно использовать родные std::mutex и std::unique_lock
Дмитрий77Потому как понимаю, deadlock схлопотать с этой кухней вероятность ненулевая (даже не на XP),
Если одна секция, то deadlock невозможно устроить.
...
Рейтинг: 0 / 0
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
    #39502322
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)
Version: 8.0.50727.762
Note : This package has the wrong version number (6.0.3790.0) but the contents of the package are the correct Visual Studio 2005 SP1 bits.
...
Рейтинг: 0 / 0
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
    #39502324
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devДмитрий77, а ты развернул на тестовой системе тот же vcredist.exe x86, с библиотеками из которого была собрана твоя библиотека? Что говорит об этой ошибке виндовый лог?
Ничего не говорит, у меня они "универсальные".
Дмитрий77Компилируется в VC++2005 (name="Microsoft.VC80.CRT" version="8.0.50727.762") -потому что собаку с этим съел - для гарантированной совместимости со всеми OS.
(На XP/2003 гарантом работоспособности является наличие .Net Framework >=2.0 SP1 - проверено годами, на остальных - по дефолту)
...
Рейтинг: 0 / 0
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
    #39502325
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77, в DllMain (DLL_PROCESS_ATTACH) критическая секция инициализирована ?
...
Рейтинг: 0 / 0
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
    #39502330
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77(На XP/2003 гарантом работоспособности является наличие .Net Framework >=2.0 SP1 - проверено годами, на остальных - по дефолту)И всё же проверь наличие необходимых версий библиотек в "%SystemRoot%\WinSxS".
Здесь удобный инструмент для поиска зависимостей.
...
Рейтинг: 0 / 0
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
    #39502332
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TСделай класс-обертку для управления.
например так
Код: plaintext
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 my_CS_lock {
	bool is_enter;
	CRITICAL_SECTION* cs;
public:
	my_CS_lock(CRITICAL_SECTION* cs) {
		this->cs = cs;
		is_enter = false;
	}

	void enter() {
		if (is_enter) return;
		EnterCriticalSection(cs);
		is_enter = true;
	}

	void leave() {
		if (!is_enter) return;
		LeaveCriticalSection(cs);
		is_enter = false;
	}

	~my_CS_lock() {
		leave();
	}
};

...
Рейтинг: 0 / 0
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
    #39502334
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TДмитрий77Я вот думаю, вычислять версию OS или м.б. надежнее полностью выкинуть эту CriticalSection и иди она лесом?
Сделай класс-обертку для управления. В конструктор передавай секцию,
Ну я вроде нашел грамотное решение, исключающее этот "косяк":
20709744
Что-то не так?
>Если компилятор поддерживает С++ 11, то можно использовать родные std::mutex и std::unique_lock
VS2005 - ясно что не поддерживает
Компилируется в VC++2005 (name="Microsoft.VC80.CRT" version="8.0.50727.762") -потому что собаку с этим съел - для гарантированной совместимости со всеми OS.
...
Рейтинг: 0 / 0
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
    #39502335
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Dima Tпропущено...

Сделай класс-обертку для управления. В конструктор передавай секцию,
Ну я вроде нашел грамотное решение, исключающее этот "косяк":
20709744
Что-то не так?
Надо следить чтобы количество вызовов Enter и Leave совпадало, иначе блокировка останется.

Leave без Enter тоже не рекомендуется вызывать
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms684169(v=vs.85).aspx If a thread calls LeaveCriticalSection when it does not have ownership of the specified critical section object, an error occurs that may cause another thread using EnterCriticalSection to wait indefinitely.
...
Рейтинг: 0 / 0
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
    #39502344
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devДмитрий77, в DllMain (DLL_PROCESS_ATTACH) критическая секция инициализирована ?
Она в FaxRouteInitialize инициализирована,
как в MSDN примере.
20709620 (приложен)

>И всё же проверь наличие
Чего проверять. У меня клиенты 10 лет по миру эти "сборки" "проверяют", претензий не было.
.Net Framework >=2.0 SP1 он устанавливает этот рантайм
(.Net 3.5 содержит 2.0 >=SP1, там где .Net 3.5 уже нет (>=4.5) с этим рантаймом тоже все в порядке)

!!! Не надо "Redistributable Package".
Танцы с бубном при установке 2005-й студии (чтоб она накатала SP1 кажется, но не накатала "Обновление для Виста" и еще пару-тройку крайних "критических" обновлений), чтоб генерила именно эту сборку (на 10-ке надо отключать "Обновление для продуктов MS"). Но в моих топиках про это есть если поищешь.
...
Рейтинг: 0 / 0
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
    #39502350
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TНадо следить чтобы количество вызовов Enter и Leave совпадало, иначе блокировка останется.
Leave без Enter тоже не рекомендуется вызывать
Ну так я именно эту задачу там и решил.
Причина блокировки была пропуск Enter из-за перехода на метку Exit по условию и запуск Leave с последующим запуском Enter.
Для XP это критично, для остальных пофиг, и SDK-писатели на это забили (sdk7.1 она для 7-ки типа)
...
Рейтинг: 0 / 0
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
    #39502876
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На 32-битном xp есть ньюансы...
Я вот чего еще не могу понять, хотя это сильно специфично
Вот эта ф-ция
FaxEnableRoutingMethod function
Сорри за VB-код:
Код: vbnet
1.
2.
3.
4.
            If FaxEnableRoutingMethod(hFaxPort, <ROUTEGUID>, bEnable) = False Then
              EnableRoutingMethods = False 'но не выходим
              err_text = "FaxEnableRoutingMethod Error " & RaiseAPIError()
            End If


На 32-битном XP всегда возвращает FALSE,
+ код ошибки такой
Код: vbnet
1.
  FaxEnableRoutingMethod Error 2 (Не удается найти указанный файл)


Но прикол в том, что то что от нее просят она как раз делает, т.е. метод включается и выключается как задумано.
(на любых других OS включая 32-битный Win2003 такого глюка не происходит, возвращает TRUE).

Видимо конечно надо забить, т.к. во-первых XP, а во-вторых отрабатывает то она правильно, но конечно странный глюк.
...
Рейтинг: 0 / 0
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
    #39502935
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

оффтоп: ты же нормально пишешь на С/С++, ну зачем тебе этот VB/VB.net? Это умершие ЯП, по ним никто особо не подскажет, т.е. или сам стань гуру или бросай.
...
Рейтинг: 0 / 0
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
    #39502936
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Вопрос был по API ф-ции (в принципе уже оффтоп относит. вопроса темы). Можно подумать она на C/C++ чо-то другое вернет.

Да не, на C/C++ я очень тяжело пишу. Только в тех случаях, когда нет выбора (как например в случае этой библиотеки).
...
Рейтинг: 0 / 0
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
    #39503116
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77
Код: vbnet
1.
FaxEnableRoutingMethod Error 2 (Не удается найти указанный файл)

Ошибка свидетельствует об отсутствии факс-файла, на который указывает handle, в списке fax file list. На какой именно метод маршрутизации указывает ROUTEGUID? На тот, который ты реализовал сам через COM/OLE?
...
Рейтинг: 0 / 0
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
    #39503127
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TДмитрий77,

оффтоп: ты же нормально пишешь на С/С++, ну зачем тебе этот VB/VB.net? Это умершие ЯП, по ним никто особо не подскажет, т.е. или сам стань гуру или бросай.Подозреваю, что это у него legacy. Есть уже какая-то немаленькая программа на VB, в которую требуется вкрячить получение факса. Возможно, какая-то самописная программа документооборота.
...
Рейтинг: 0 / 0
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
    #39503588
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devОшибка свидетельствует об отсутствии факс-файла, на который указывает handle, в списке fax file list.
Ух ты как загнул то.
Не, понятно что тебе эт не надо, но видимо придется объяснять, потому что не могу этот набор слов спокойно читать.
А для наглядности картинка с Win2016 (визуальное управление есть только на Win Server, но работает кухня и на рабочих станциях XP/win10 тоже).

FaxEnableRoutingMethod function

RoutingGuid -это "метод", например "Store in a folder" или "Print" -для каждого метода свой уникальный GUID
FaxPortHandle - возвращается из FaxOpenPort function , в которой есть параметр DeviceId - это факс девайс (напр. Fax Line 0 или Fax Line 1), модем то бишь если по старинке (но не обязательно модем).

Короче, первые два параметра в FaxEnableRoutingMethod однозначно задают пару (имя девайса, имя метода).
Метод может быть либо Enabled=yes, либо Enabled=no (см. картинку)
FaxEnableRoutingMethod как раз и устанавливает yes/no (третий параметр) для пары (имя девайса, имя метода). Все. Ни о каком "факс-файле, на который указывает handle" там речь не идет, это чисто конфигурационная ф-ция.
rdb_devНа какой именно метод маршрутизации указывает ROUTEGUID? На тот, который ты реализовал сам На любой. Меня конечно свои интересуют.
Что касается XP-32, то yes/no то она там тоже меняет как заказано (функция то отрабатывает), но при этом false+Error2. Но думаю это глюк на кот. надо забить (не говоря о том что эта кухня на клиентах/не серверах xp/win7/win10 несколько "неофициальна", о чем написал здесь ).

rdb_devчерез COM/OLE
Я как раз счас избегаю Fax Service Extended COM Object Model , хотя они и "рекомендуют" и для того же VB, COM это "свое родное", с COM задолбаешься глюки лечить и ошибки отрабатывать.

Вот это Fax Service Client API for Windows 2000 гораздо надежней. Не говоря о том, что для Fax Service Provider API и Fax Routing Extension API COM и VB/Net не применимо в принципе. Хотя была бы лазейка, написал бы эти dll на .Net.

rdb_devПодозреваю, что это у негоНе надо меня ни в чем подозревать.
...
Рейтинг: 0 / 0
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
    #39503862
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Ух ты как загнул то.
Не, понятно что тебе эт не надо, ...Пока не надо.

Дмитрий77но видимо придется объяснять, потому что не могу этот набор слов спокойно читать.Чот я не обратил внимания, что handle к устройству, а не к файлу. Был невнимателен к чужой проблеме.

Дмитрий77RoutingGuid -это "метод", например "Store in a folder" или "Print" -для каждого метода свой уникальный GUID
FaxPortHandle - возвращается из FaxOpenPort function , в которой есть параметр DeviceId - это факс девайс (напр. Fax Line 0 или Fax Line 1), модем то бишь если по старинке (но не обязательно модем).RoutingGUID, это, таки, идентификатор зарегистрированного в системе метода маршрутизации факса.

Дмитрий77rdb_devНа какой именно метод маршрутизации указывает ROUTEGUID? На тот, который ты реализовал сам На любой. Меня конечно свои интересуют.
Что касается XP-32, то yes/no то она там тоже меняет как заказано (функция то отрабатывает), но при этом false+Error2. Но думаю это глюк на кот. надо забить (не говоря о том что эта кухня на клиентах/не серверах xp/win7/win10 несколько "неофициальна", о чем написал здесь ).И ошибка вылазит на XP при попытке включить любой из методов или только твой? При этом, в журнале Security Log системы возникает какая-нибудь запись по этому поводу?
...
Рейтинг: 0 / 0
Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
    #39504186
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devRoutingGUID, это, таки, идентификатор зарегистрированного в системе метода маршрутизации факса.
Естественно.
rdb_devИ ошибка вылазит на XP при попытке включить любой из методов или только твой? При этом, в журнале Security Log системы возникает какая-нибудь запись по этому поводу?
"Любой" метод ты на XP (или на Win10) без дополнительных танцев так не включишь.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fax\Routing Extensions\Microsoft Routing Extension
Что касается FaxRouteEmail(Microsoft Routing Extension), он на этих OS жестко заблокирован в принципе (политика MS в отношении рабочих станций).
Что касается FaxRouteStore(Microsoft Routing Extension) и FaxRoutePrint(Microsoft Routing Extension),
то там требуется еще соотв. указать папку или принтер, без этого будет
Error 1610 (Данные настройки для этого продукта повреждены. Обратитесь в службу поддержки).
Для моих методов дополнительного указания чего либо для их включения не требуется (он либо запускает exe если включен, либо не запускает если выключен, а exe уже лезет в "свои настройки").

Но MS-метод можно выключить.
Напр. можно выключить FaxRouteStore(Microsoft Routing Extension).

Код: vbnet
1.
2.
3.
4.
            If FaxEnableRoutingMethod(hFaxPort, "{92041a90-9af2-11d0-abf7-00c04fd91a4e}", False) = False Then
              EnableStoreInFolder = False 'но не выходим
              err_text = "FaxEnableRoutingMethod Error " & RaiseAPIError()
            End If


С FaxRouteStore(Microsoft Routing Extension) и на XP при выключении возвращает TRUE.

А с моими методами на XP 1) выключает, как запрошено 2) но возвращает FALSE + Err 2
В журнале ничего нет. Если имел ввиду "не as Admin", то это Err.5, об этом речи не идет.

Да забить на это надо. Ошибка ложная(на других OS ее не возникает, на Exit я в этом месте кода по любому не иду), функция свое дело все равно делает, академический интерес почему так?
...
Рейтинг: 0 / 0
18 сообщений из 43, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Fax Service + Extension.Dll. Dll(x64) на x64-все OK, Dll(Win32) на Win32 -вышибает службу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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