Сохраните ваши собственные библиотеки в подпапках и наведите указатель на Library Loader , заполнив соответственно переменную среды процесса PATH
с указанием пути к правильной версии для загрузки.
Например, данныйэтот макет дерева ...
Your_assembly.dll
|_NativeBinaries
|_x86
|_your_native.dll
|_amd64
|_your_native.dll
... и этот код (извините, C #, нет VB.Net: - /) ...
internal static class NativeMethods
{
private const string nativeName = "your_native";
static NativeMethods()
{
string originalAssemblypath = new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath;
string currentArchSubPath = "NativeBinaries/x86";
// Is this a 64 bits process?
if (IntPtr.Size == 8)
{
currentArchSubPath = "NativeBinaries/amd64";
}
string path = Path.Combine(Path.GetDirectoryName(originalAssemblypath), currentArchSubPath);
const string pathEnvVariable = "PATH";
Environment.SetEnvironmentVariable(pathEnvVariable,
String.Format("{0}{1}{2}", path, Path.PathSeparator, Environment.GetEnvironmentVariable(pathEnvVariable)));
}
[DllImport(nativeName)]
public static extern int function1(int param);
[DllImport(nativeName)]
public static extern int function2(int param);
}
... function1
и function2
будут динамически связаны с 32- или 64-битной версией собственного кода, в зависимости от размера IntPtr (подробнее об этом в этом посте от Скотт Хансельман или этот вопрос StackOverflow ).
Примечание 1: Это решение особенно полезно, когда обе версииDLL имеют то же имя или если вы не хотите дублировать все внешние ссылки.
Примечание 2: Это уже было успешно реализовано в LibGit2Sharp .