簡體   English   中英

無法在C#中加載C ++ DLL

[英]Cannot Load C++ DLL in C#

>我之前的主題<

我創建了這個,因為我在VMBox上安裝了WinXP,但無法使其再次運行。

這次我在表單上創建了一個OnLoad事件

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

在我的PC上運行正常,但在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();

這應該給你一個錯誤代碼。

是否有可能部署了本機dll的調試版本,而該版本也需要MSVCR90 D .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;
}

在LoadLibrary之后調用GetLastError,在此處檢查錯誤代碼值: http : //msdn.microsoft.com/en-us/library/ms681381.aspx ,看看是否有幫助。

dll的位置可能在一個環境中而不是在另一個環境中。 也可能是一個環境中的權限與另一個環境中的權限不同。

嘗試在DLL上運行依賴項遍歷器 -查看是否缺少任何模塊。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM