如何正确使用VB6中的全局对象?

问题描述 投票:0回答:1

我有一个用 C# 编写的 COM DLL,可以与 MS Word(使用 Interop)一起使用,并在 VB6 项目中使用此 COM。

在模块中,我定义了一个这样的全局变量:

Public obj As Office.OfficeWord

表格1:

Set obj = New OfficeWord

通过创建对象,创建了一个单词实例,我可以在任务管理器中看到该实例。 在 Form2 中,我创建一个新文档并将其关闭(不是 Word.Application):

OfficeWord.CreateNewDoc
// doing some work   
OfficeWord.Close

当我关闭 Form2 并尝试再次添加新文档(在 Form1 或 Form2 中)时,出现以下错误: “Word 遇到问题”。但是,该实例仍然存在,我可以在任务管理器中看到它。 我应该提到,如果我只使用 Form1 一切都很好,我可以添加一个新文档并多次关闭它,最后,也正确关闭实例(obj.Quit),但是当我想与公众一起工作时Form2 中的对象我收到上面的错误。

C# DLL 使用以下代码行来创建和关闭 Word 文档和实例:

 public OfficeWord() 
 {
    wdapp = new Word.Application();
 }

public int CreateNewDoc()
{
   wddoc=wdapp.Documents.Add();
}

public int Close()
{
   object saveOption = Word.WdSaveOptions.wdDoNotSaveChanges;
   object originalFormat = Word.WdOriginalFormat.wdOriginalDocumentFormat;
   object routeDocument = false;
   wddoc.Close(ref saveOption, ref originalFormat, ref routeDocument);
}

public int Quit()
{
    wdapp.Quit(false);   
}

必须使用Form1、Form2和公共变量。 请指导我。 谢谢。

c# com vb6 global-variables office-interop
1个回答
0
投票

这可能看起来有点奇怪,但它在“vb6”中多次有效。 当您使用了相应的对象并且不再需要它后,将其设置为“Nothing”。

表格1:

Set obj = Nothing
Set obj = New OfficeWord
© www.soinside.com 2019 - 2024. All rights reserved.