我正在做一个带有 VSTO 的 Microsft PowerPoint 插件解决方案,它从硬件读取信息,硬件开发人员给了我他们的 SDK 来控制这个硬件,但我在尝试控制它时遇到了问题。
我有这个图书馆
ARS
有一堂课
ARS.BaseConnection
我有这个变量
ARS.BaseConnection BaseConn;
问题是当我创建一个类型的新对象时BaseConnection
BaseConn = new ARS.BaseConnection();
调试器没有显示任何异常,POWERPNT.exe 只是崩溃并停止。
我试图调试 POWERPNT,它说访问冲突写入位置 0x00d20f78。但我不是在编程 PowerPoint。
我发现SDK中的演示程序(实际工作)在main之前有一个[STAThread],所以我认为它必须作为STA运行所以我创建了一个新线程:
ARS.BaseConnection BaseConn;`
public form1()
{
InitializeComponent();
System.Threading.Thread thread = new System.Threading.Thread(createBase);
thread.SetApartmentState(System.Threading.ApartmentState.STA);
thread.Start();
thread.Join();
BaseConn.Open(); // There is the problem, when I'm trying to use open() BaseConn debuger says: COM object that has been separated from its underlying RCW cannot be used.
}
private void createBase()
{
BaseConn = new ARS.BaseConnection(); //If it runs in a STA tread doesn't crash.
}
我得到的COM 对象已与其底层 RCW 分离,无法使用。
我怎样才能使它起作用?