Привет, хаброчеловеки!
Я пишу Службу Windows (Windows Service), в которой, помимо всего прочего, идет проверка на наличие OpenCL устройств в системе. Для этой проверки используется уже установленная библиотека OpenCL.dll, а именно — функция
clGetPlatformIDs.
Проблем в том, что после вызова этой функции, не происходит возврата в программу. Служба висит некоторое время, после чего ее убивает винда (timeout). Никаких исключений не вылетает.
Служба работает как LocalSystem.
Импортирую так:
[DllImport("OpenCL.dll")]
public static extern int clGetPlatformIDs(
uint num_entries,
[MarshalAs(UnmanagedType.LPArray)] System.IntPtr[] platforms,
out uint num_platforms);
Использую так:
int error;
uint numPlatforms;
error = Test.clGetPlatformIDs(0, null, out numPlatforms);
Пробовал использовать разные соглашения о вызове (СallingConvention), никаких результатов не дало.
В проекте также используется библиотеки kernel32.dll, advapi32.dll — с ними никаких проблем нет.
Если вышеприведенный код я вставляю в обычный консольный проект, все работает как часы.
Объясните, пожалуйста, что я делаю не так и куда мне копать. Заранее спасибо!