【问题标题】:Aspose.PDF Triggers BreakpointAspose.PDF 触发断点
【发布时间】:2019-04-04 12:49:16
【问题描述】:

我在我们公司现有的应用程序中实施了 Aspose.CellsAspose.PDF。 虽然我遇到了一些麻烦(主要是因为我试图将两个 API 实现到 exat 同一个文件中,这是一个坏主意) 我想出了如何让它或多或少地工作。

我现在的问题是,虽然 Aspose.Cells 工作得非常好并且似乎没有任何异常行为 Aspose.PDF 已经在努力设置许可证,甚至当我最终得到了这个工作,我什至无法启动 Aspose::Pdf::Document

所以第一个完全不寻常的事情是我必须在 Aspose 包提供的示例代码中设置许可证的方式,而在官方资源中,许可证是这样设置的。

auto lic = System::MakeObject<Aspose::Pdf::License>();
lic->SetlLicense("c:\\Foo\fooproj\\Aspose.Total.C++.lic");

此代码不会在我的机器上运行并导致错误。

粗略翻译

food.exe 触发断点

原创

food.exe Hat einen Haltepunkt ausgelöst

当我使用这样的 emtpy 构造函数初始化 System::String 时,也会发生同样的情况。

 auto lic = System::MakeObject<Aspose::Pdf::License>();
 System::String str;
 str.FromUtf8("C:\\foo\fooproj\\Aspose.Total.C++.lic");
 lic->SetLicense(str);

但是,如果我首先使用空字符串初始化 System::String,则许可证似乎可以正常工作,因此可以正常工作。

 auto lic = System::MakeObject<Aspose::Pdf::License>();
 System::String str(u"");
 str.FromUtf8("C:\\Projekte\\Aspose\\Lizens\\Aspose.Total.C++.lic");
 lic->SetLicense(str);

如果上面的代码有效并且我尝试从 Aspose::Pdf::Document 创建一个对象,这将崩溃。

void Aspose_pdf::helloWorld()
{
  auto doc = System::MakeObject<Aspose::Pdf::Document>();
.....
.....
}

我实际上不知道发生了什么。我目前没有使用任何 using namespace 命令。 如果有人知道如何解决这个问题,那就太好了。

编辑: 该错误恰好发生在以下函数的 smart_ptr.h 中。

typename std::enable_if<!IsSmartPtr<T>::value, SmartPtr<T> >::type  MakeObject(Args&&... args)
{
    System::Detail::OwnNextObject ownershipSentry;
    T *const object = ::new T(std::forward<Args>(args)...);
    ownershipSentry.CreatedSuccessfully(object);
    return SmartPtr<T>(object);
}

在第二行所以T *const object = ::new T(std::forward&lt;Args&gt;(args)...); 是“导致”错误或至少在此处触发错误。

编辑2:

Here 你会发现一个简单的例子来说明我的代码的一般外观。 我开始在我的程序中实现 Aspose.Pdf 所以我编辑了我的 附加库目录、附加依赖项、附加包含目录、预处理器定义和我的堆栈大小,以适应 Aspose.Pdf 示例中给出的这些设置。 在此之后,我创建了我的 Aspose_Pdf 类并对其进行了测试。到目前为止工作完美。 在此之后,我进行了相同的编辑以适应 Aspose.Cells。我还创建了一个类 Aspose_Cells 并对其进行了测试。虽然现在这有效,但我的 Aspose_Pdf 类停止了工作。过了一会儿,我设法让 Aspose_Pdf 的许可证激活从此时开始工作,我遇到了上述问题。

附加依赖:

   ...
    Aspose.PDF_vc141x64d.lib
    aspose_cpp_vc141x64d.lib
    Aspose.Cells.lib

其他图书馆目录:

   ...
    ..\Aspose\Aspose.PDF\lib\Debug
    ..\Aspose\Aspose.Cells\lib64

其他包含目录

 ...
    ..\Aspose\Aspose.PDF\lib\Debug
    ..\Aspose\Aspose.PDF\include\asposecpplib
    ..\Aspose\Aspose.PDF\include\Aspose.Pdf.Cpp
    ..\Aspose\Aspose.Cells\Include
    ..\Aspose\Aspose.Cells\Include\icu\include
    ..\Aspose\Aspose.Cells\Include\boost

【问题讨论】:

  • 有什么理由使用System::MakeObject&lt;...这样的怪异方式来初始化对象?
  • @SergeyShevchenko 我实际上不知道为什么要这样做,但我还没有找到另一种正确初始化这些对象的方法。我使用了 API 包中给出的示例代码以及来自官方网站的一些参考资料。
  • 您能否分享缩小范围的示例应用程序,同时提及重现它的步骤,以便我们尝试重现它并相应地为您提供帮助。 PS:我与 Aspose 合作,担任开发人员宣传员。
  • @FarhanRaza 感谢您的回复。请查看我的Edit2:我希望这次我设法提供了您需要的所有信息
  • 我们正在调查您的要求,因为您已在 Aspose 论坛上报告了详细信息。我们将很快与您分享我们的发现。请在各自的线程中跟进。

标签: c++ windows visual-studio-2017 aspose aspose.pdf


【解决方案1】:

我从未听说过 Aspose.Pdf,我也不知道 System::MakeObject&lt; 是如何工作的。但对我来说,看起来所有代码都可以简化为下一个:

Aspose::Pdf::License^ lic = gcnew Aspose::Pdf::License();
System::String^ str = "C:\\foo\\fooproj\\Aspose.Total.C++.lic";
lic->SetLicense(str);

当涉及到Pdf.Document 时,初始化可能如下所示:

Aspose::Pdf::Document^ doc = gcnew Aspose::Pdf::Document();

【讨论】:

  • 感谢您的回答。不幸的是,我无法使用此代码示例,因为我使用的是 c++ 而不是 c++-cli。我不知道是谁以及为什么更改了此标签
猜你喜欢
  • 1970-01-01
  • 2021-12-28
  • 2018-09-25
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多