views:

91

answers:

3

I have a Vendor.DLL (Native DLL, written in C++) that exposes many methods. Typically Vendor.DLL opens Vendor proprietary files, returns handles and allows more Read/Write operation on those files. Vendor.DLL supports multi-threading (when called from unmanaged code/COM).

If I expose Pinvoked method(s) from Vendor DLL, say

PinvokedVendor.DLL

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

How to ensure that this wrapper class is thread safe? Is it even thread safe when called from ASP.NET? What are my options?

Thanks in advance.

+4  A: 

A call its a call its a call. Thread safety derives from the implementation of the vendor DLL and it's interface specifications. P-Invoke has nothing to do with it.

Remus Rusanu
A: 

From the perspective of the vendor.dll, the PInvoke call won't look any different than a normal native method call. It shouldn't have any effect on the thread safety of their code. Given that the PInvoke calls are all static it is fine to call them from multiple threads within your code. Assuming of course you use the resulting data in a manner that is safe as prescribed by vendor.dll

JaredPar
A: 

Would making your code [MTAThread] instead of [STAThread] be useful in the approach to using pinvoke and threading in relation to COM? Just a thought...

Hope this helps, Best regards, Tom.

tommieb75
I remember reading something about this, http://msdn.microsoft.com/en-us/library/system.mtathreadattribute.aspx
tommieb75