私は.NET 4.0用にC#で書かれたプロジェクトに取り組んでいます(Visual Studio 2010経由)。C/C++ DLL の使用を必要とするサード パーティ ツールがあり、C# の 32 ビット アプリケーションと 64 ビット アプリケーションの例があります。
問題は、32 ビット デモが 32 ビット DLL に静的にリンクし、64 ビット デモが 64 ビット DLL に静的にリンクすることです。.NET アプリケーションであるため、クライアント PC 上で 32 ビットまたは 64 ビットのプロセスとして実行できます。
.NET 4.0 フレームワークは、アプリケーションが 64 ビット プロセスとして実行されている場合に true を返す Environment.Is64BitProcess プロパティを提供します。
私がやりたいことは、Is64BitProcess プロパティをチェックした後、正しい DLL を動的にロードすることです。ただし、動的にロードするライブラリを調査すると、常に次のことがわかります。
[DllImport("kernel32.dll")]
public static extern IntPtr LoadLibrary(string dllToLoad);
[DllImport("kernel32.dll")]
public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);
[DllImport("kernel32.dll")]
public static extern bool FreeLibrary(IntPtr hModule);
これらのメソッドは、32 ビット オペレーティング システム専用のようです。64 ビットに相当するものはありますか?
Is64BitProcess チェックに基づいて適切なメソッドが呼び出される限り、32 ビット ライブラリと 64 ビット ライブラリの両方を静的にリンクすると問題が発生しますか?
public class key32
{
[DllImport("KEYDLL32.DLL", CharSet = CharSet.Auto)]
private static extern uint KFUNC(int arg1, int arg2, int arg3, int arg4);
public static bool IsValid()
{
... calls KFUNC() ...
}
}
public class key64
{
[DllImport("KEYDLL64.DLL", CharSet = CharSet.Auto)]
private static extern uint KFUNC(int arg1, int arg2, int arg3, int arg4);
public static bool IsValid()
{
... calls KFUNC() ...
}
}
...
if (Environment.Is64BitProcess)
{
Key64.IsValid();
}
else
{
Key32.IsValid();
}
ありがとうございました!!