2

>私の前スレ<

これを作成したのは、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) もあります。

何が問題なのですか?

4

4 に答える 4

3

さらに問題が発生した場合は、お電話ください

Marshal.GetLastWin32Error();

エラーコードが表示されます。

MSVCR90 D .DLL のデバッグ バージョンも必要とするネイティブ 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;
}
于 2009-04-09T18:32:49.013 に答える
1

LoadLibrary の後に GetLastError を呼び出し、エラー コードの値をhttp://msdn.microsoft.com/en-us/library/ms681381.aspx で確認し、問題が解決するかどうかを確認します。

于 2009-04-09T18:31:23.683 に答える
0

dll の場所が、ある環境ではパス上にあり、別の環境ではパス上にない可能性があります。また、ある環境の権限が他の環境と同じではない可能性もあります。

于 2009-04-09T18:21:57.853 に答える
0

DLL で依存関係ウォーカーを実行してみてください。不足しているモジュールがないかどうかを確認してください。

于 2009-04-09T18:24:55.197 に答える