我有一个c#控制台程序 和一个写好的c++ dll,
想通过c#Task方式调用dll中的函数,
经测试,单任务下能够进行完美调用 c# [dllimport]方式
现若在c#中增加Task,便会导致异常报错,dll层,dll使用了锁机制,
单个静态对象指针 Person *p = new Person();
Task.Run(()=>{
//调用p.fun1();
});
Task.Run(()=>{
//调用p.fun2();
});//error
引发的异常:“System.Runtime.InteropServices.SEHException”(位于 ConsoleApp2.dll 中)
引发的异常:“System.Runtime.InteropServices.SEHException”(位于 ConsoleApp2.dll 中)
引发的异常:“System.Runtime.InteropServices.SEHException”(位于 System.Private.CoreLib.dll 中)
引发的异常:“System.Runtime.InteropServices.SEHException”(位于 System.Private.CoreLib.dll 中)
引发的异常:“System.AggregateException”(位于 System.Private.CoreLib.dll 中)
“System.AggregateException”类型的未经处理的异常在 System.Private.CoreLib.dll 中发生
One or more errors occurred.
今日,看到c++ 可以导出类,我想可不可以吧dll中的对象类导出,之后使用c#在Task中进行对c++类的实例化,进而实现多线程?不想在dll中添加任何导出,增加dll的整洁度(Tensorrt项目)
Person *p = new Person();
C# 调用C++中多线程对象 不要使用静态对象指针,会发生内存泄露
检查C++代码的逻辑
C++编译的时候,可选线程安全参数,确认是否选择了线程安全,再就是如果这个DLL引用了别的库,也需要线程安全。。