请教一下,C# 调用CodeSoft7, ActiveDocument对象为Null的问题

浮&生 2024-03-10 16:21:21

引用文件是看官网实例里面的 C:\Program Files (x86)\Tki\7\Common\Lppx2.tlb, 调用代码:

using LabelManager2;

...
LabelManager2.Application csApp = null;
Document doc = null;
try
{
    csApp = new LabelManager2.ApplicationClass();

    if (doc != null)
    {
        doc.Close(false);
        Marshal.ReleaseComObject(doc);
        doc = null;
    }

    if (csApp != null)
    {
        Documents documents = csApp.Documents;
        //this.CsApp.Visible = true;

        documents.Open(localFullPath, false);
        doc = csApp.ActiveDocument;

        Marshal.ReleaseComObject(documents);
    }
   doc.Variables.FreeVariables.Item("DataCode").Value = "2024-3-9";//给lab文件中设置的变量传值

   doc.CopyImageToFile(8, "BMP", 0, 100, localDownPath + "/imgs");


}
catch (Exception ex)
{
    if (doc != null)
    {
        Marshal.ReleaseComObject(doc);
        doc = null;
    }
    System.Diagnostics.Debug.Assert(false, ex.Message);
}
finally
{
    CsApp.Documents.CloseAll();
    CsApp.Quit();
    GC.Collect(0);
}

但是调试的时候,发现Application.ActiveDocument一直为null,调试截图:

 有大佬知道怎么解决吗?

...全文
Hello World
拼手气红包 20.00元
1370 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

红包真大啊

浮&生 03-11
  • 打赏
  • 举报
回复

解决了,原因是:路径里面的"/" 不识别,导致找不到文件,

img


Path.GetFullPath("路径")//转换后调试界面查看值是”..\..\...

麻了,我是笨比。

  • 打赏
  • 举报
回复

这个问题可能是由于在打开文档时出现了错误或者延时导致的。我建议您尝试以下几种方法来解决这个问题:

等待文档完全加载
在获取 ActiveDocument 之前,加入一个短暂的等待,让文档有足够时间完全加载。可以使用 System.Threading.Thread.Sleep() 方法来实现这一点。

documents.Open(localFullPath, false);
// 等待文档加载
System.Threading.Thread.Sleep(500); // 等待500毫秒
doc = csApp.ActiveDocument;

使用事件监听文档打开完成
另一种方法是使用 DocumentEvents 接口来监听文档打开完成事件,然后再获取 ActiveDocument。

var documentEvents = csApp.Events.DocumentEvents;
bool isDocumentOpened = false;

// 设置文档打开完成事件处理程序
documentEvents.DocumentOpened += (Document Doc) =>
{
    isDocumentOpened = true;
    doc = Doc;
};

documents.Open(localFullPath, false);

// 等待文档加载完成
while (!isDocumentOpened)
{
    System.Threading.Thread.Sleep(100);
    Application.DoEvents();
}

3.检查错误信息
如果以上方法都不奏效,您可以尝试捕获在打开文档时可能抛出的异常,并检查错误信息以了解具体原因。


try
{
    documents.Open(localFullPath, false);
    doc = csApp.ActiveDocument;
}
catch (Exception ex)
{
    // 处理异常
    Console.WriteLine(ex.Message);
}
浮&生 03-10
  • 举报
回复
@白驹_过隙 感谢大佬提供的思路,但是试了一下等待文档设置了sleep5秒,不起作用;捕获的错误是 doc.Variables提示“System.NullReferenceException 未将对象引用设置到对象的实例。”,还是这个doc获取不到。
  • 举报
回复
@浮&生 那我也是不是太清楚,不好意思
浮&生 03-10
  • 举报
回复
@白驹_过隙 没事,还是谢谢您

110,543

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧