gpt4 book ai didi

asp.net - 在 ASP.NET 网站中使用 LoadLibrary 加载非托管 DLL

转载 作者:行者123 更新时间:2023-12-04 05:47:18 29 4
gpt4 key购买 nike

我正在开发一个 ASP.NET 网站,在 Visual Studio 2010 中进行开发。该网站的大部分内容是用托管代码(F# 和 C#)编写的,但它的某些功能使用了非托管 DLL (QuickPDF)。该站点在本地运行良好,但是当部署到托管服务提供商 (aspnethosting.co.uk) 时,LoadLibrary 调用失败,返回 IntPtr.Zero 的句柄。

根据托管服务提供商的控制台,该站点以完全(内部)信任级别运行。

DLL 位于网站的 bin 目录中,托管服务提供商告诉我它具有适当的权限。

我已经尝试使用 .\完全不使用 DLL 的特定路径,并且还使用 Assembly.GetExecutingAssembly().CodeBase(请参阅下面的 F# 代码)计算出当前程序集路径的内容 - 在本地运行时可以正常工作。

我还能做些什么来帮助确定这一点?

这是计算 DLL 路径的 F# 代码:

let assemblyDirectory =
let codeBase = Assembly.GetExecutingAssembly().CodeBase;
let uri = new UriBuilder(codeBase)
let path = Uri.UnescapeDataString(uri.Path)
Path.GetDirectoryName(path)

这是 F# 代码使用该路径的地方(已检查它指向 DLL)
let dllPath = Path.Combine(assemblyDirectory, "QuickPDFDLL0814.dll")
if not (File.Exists(dllPath)) then
failwith ("Could not find QuickPDF DLL at: " + dllPath)
let lib = QuickPDFDLL0814.PDFLibrary(dllPath)

这是尝试加载 QuickPDF dll 的 C# 代码 - 这是它失败的地方 - 即。 dllHandle 等于 IntPtr.Zero。
    public PDFLibrary(string dllFileName)
{
dll = new DLL(dllFileName);
if (dll.dllHandle != IntPtr.Zero)
{
instanceID = dll.QuickPDFCreateLibrary();
dll.RegisterForShutdown(instanceID);
}
else
{
dll = null;
}
}
...
public DLL(string dllFileName)
{
dllHandle = LoadLibrary(dllFileName);
if (dllHandle == IntPtr.Zero)
throw new InvalidOperationException("Could not load library " + dllFileName);
else
{

最佳答案

我破解了它。 QuickPDF 提供 32 位和 64 位版本的 DLL。我需要使用 64 位版本。 [红脸。] 感谢提供答案的人。

关于asp.net - 在 ASP.NET 网站中使用 LoadLibrary 加载非托管 DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10506304/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com