Многопоточность Pinvoked DLL в управляемой среде. Является ли это возможным? - PullRequest
3 голосов
/ 29 января 2010

У меня есть Vendor.DLL (собственная библиотека DLL, написанная на C ++), которая предоставляет множество методов. Обычно Vendor.DLL открывает проприетарные файлы Vendor, возвращает дескрипторы и позволяет больше операций чтения / записи для этих файлов. Vendor.DLL поддерживает многопоточность (при вызове из неуправляемого кода / COM).

Если я предоставляю метод (ы) Pinvoked из DLL поставщика, скажем

PinvokedVendor.DLL

[System.Runtime.InteropServices.DllImportAttribute("Vendor.dll", EntryPoint = "SomeVendorMethod")]
            public static extern int SomeVendorMethod(uint param1, ref SomeVendorDataStruct pData);

Как гарантировать, что этот класс-обертка является потокобезопасным? Это даже потокобезопасно при вызове из ASP.NET? Какие у меня варианты?

Спасибо заранее.

Ответы [ 3 ]

4 голосов
/ 29 января 2010

Вызов это вызов, это вызов.Безопасность потоков зависит от реализации DLL поставщика и его спецификаций интерфейса.P-Invoke не имеет к этому никакого отношения.

0 голосов
/ 29 января 2010

Было бы полезно сделать ваш код [MTAThread] вместо [STAThread] в подходе к использованию pinvoke и многопоточности относительно COM? Просто мысль ...

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

0 голосов
/ 29 января 2010

С точки зрения vendor.dll, вызов PInvoke не будет выглядеть иначе, чем обычный вызов нативного метода. Это не должно иметь никакого влияния на потокобезопасность их кода. Учитывая, что все вызовы PInvoke являются статическими, можно вызывать их из нескольких потоков в вашем коде. Предполагая, конечно, что вы используете полученные данные безопасным способом, предписанным vendor.dll

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...