我尝试使用 .NET Core 来使用 LibreOffice,但遇到一条错误,提示“引导句柄未初始化”。
using unoidl.com.sun.star.uno;
m_xContext = uno.util.Bootstrap.bootstrap();
' 我尝试过克隆源代码并自己调试,但它相当复杂,而且我似乎总是走进了死胡同。经过一番调查,我意识到指针始终为空。
我在https://kenbonny.net/consuming-a-c-dll-in-dotnet-core上看到一篇文章,并尝试使用以下代码:
private static extern bool FreeLibrary(IntPtr libraryReference);
[DllImport("C:\\development\\libreoffice-uno-dotnet-main\\DLL\\cli_cppuhelper.dll", EntryPoint = "defaultBootstrap_InitialComponentContext", SetLastError = true, CallingConvention = CallingConvention.Cdecl)]
但是,我始终收到一条错误消息,指出找不到该方法。我还尝试了以下代码:
var registerPointer = GetProcAddress(_dllPointer, "defaultBootstrap_InitialComponentContext");
if (registerPointer == IntPtr.Zero)
throw new System.Exception("Something went wrong!");
// dotnet 4.X aka full framework
var registerCallback = (RegisterCallback)Marshal.GetDelegateForFunctionPointer(registerPointer, typeof(RegisterCallback));
var registerResult = registerCallback(_keepAlive);
但是我仍然遇到指针为空的问题。有没有人尝试找到将 LibreOffice 与 .NET Core 结合使用的解决方案或找到任何解决方法?
需要注意的是,将 LibreOffice 等复杂软件与 .NET Core 集成可能需要丰富的专业知识,并且由于兼容性和技术挑战,这并不总是那么简单。
如果这是一个已知的错误,那么这就是答案,无需进一步询问。您能做的最好的事情是将您的电子邮件添加到错误的抄送列表中,或者可能雇用某人来处理该错误。
虽然我还没有尝试过最新的 .NET 版本,但我过去已经使用了 C# SDK 示例。
Java 与 LibreOffice 的集成比 .NET 进行了更好的测试且更可靠,因此也许这是可以考虑的替代方案。