我有一个Vendor.DLL(本机DLL,用C ++编写),它暴露了许多方法。通常,Vendor.DLL打开供应商专有文件,返回句柄并允许对这些文件进行更多读/写操作。 Vendor.DLL支持多线程(从非托管代码/ COM调用时)。
如果我从供应商DLL公开Pinvoked方法,请说
PinvokedVendor.DLL
[System.Runtime.InteropServices.DllImportAttribute("Vendor.dll", EntryPoint = "SomeVendorMethod")]
public static extern int SomeVendorMethod(uint param1, ref SomeVendorDataStruct pData);
如何确保此包装类是线程安全的?从ASP.NET调用时它是否是线程安全的?我有什么选择?
提前致谢。
答案 0 :(得分:4)
拨打电话即可拨打电话。线程安全源于供应商DLL的实现及其接口规范。 P-Invoke与它无关。
答案 1 :(得分:0)
从vendor.dll的角度来看,PInvoke调用看起来与普通的本机方法调用没有什么不同。它不应该对其代码的线程安全性产生任何影响。鉴于PInvoke调用都是静态的,可以从代码中的多个线程调用它们。当然假设您以vendor.dll
规定的安全方式使用结果数据答案 2 :(得分:0)
使用代码[MTAThread]而不是[STAThread]会对使用与COM相关的pinvoke和线程的方法有用吗?只是一个想法...
希望这有帮助, 最好的祝福, 汤姆。