gpt4 book ai didi

c# - 无法在 C# 中加载 C++ DLL

转载 作者:搜寻专家 更新时间:2023-10-31 01:23:47 25 4
gpt4 key购买 nike

>My previous thread<

我创建了这个,因为我在 VMBox 上安装了 WinXP,但我无法让它再次工作。

这次我在我的表单上创建了一个 OnLoad 事件

        if (LoadLibrary("blowfish.dll") == 0)
{
Misc.LogToFile("Could not load dll", true);
Application.Exit();
}

在我的电脑上运行良好,但在 VMBox LoadLibrary 上返回 0。

一些用户提到问题出在将旧的 NET Framework(2.0) 与在最新的 MS Visual Studio(2008 SP1) 上制作的 dll 混合在一起,所以我采取了行动,现在程序属性设置为与 NET 3.5 一起使用

在 VMBox 上我有 NET 2.0,但这不是问题 - 程序本身运行良好。我还有 C++ Redistributable(2005、2005 SP1 和 2008)。

可能是什么问题?

最佳答案

麻烦你打电话

Marshal.GetLastWin32Error();

这应该会给你一个错误代码。

是否有可能您部署了 native dll 的调试版本,它还需要 MSVCR90D.DLL 的调试版本?您应该已经分发了发布版本,因为调试版本需要在目标系统上存在一组不同的 dll。

它显然适用于您的开发机器,因为所需库的所有调试版本都随 Visual Studio 一起提供。

这是获取属于错误代码的消息的方式:

[DllImport("kernel32.dll")]
private static extern int FormatMessage(int dwFlags,
IntPtr lpSource, int dwMessageId, int dwLanguageId,
out string lpBuffer, int nSize, IntPtr pArguments);

public static string GetErrorMessage(int errorCode)
{
const int FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100;
const int FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200;
const int FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000;

string lpMsgBuf;
int dwFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER
| FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS;

int retVal = FormatMessage(dwFlags, IntPtr.Zero, errorCode, 0,
out lpMsgBuf, 0, IntPtr.Zero);
if (0 == retVal)
{
return null;
}
return lpMsgBuf;
}

关于c# - 无法在 C# 中加载 C++ DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/735346/

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