Lamentablemente, no sé nada sobre esta DLL en particular. Sin embargo, al hacer la P/invocación usted mismo, y puede hacer frente a una pequeña duplicación, es posible crear un proxy para cada plataforma.
Por ejemplo, supongamos que usted tiene el siguiente interfaz, que debería implementarse ya sea por un 32 o 64 bits DLL:
public interface ICodec {
int Decode(IntPtr input, IntPtr output, long inputLength);
}
crear el proxy:
public class CodecX86 : ICodec {
private const string dllFileName = @"Codec.x86.dll";
[DllImport(dllFileName)]
static extern int decode(IntPtr input, IntPtr output, long inputLength);
public int Decode(IntPtr input, IntPtr output, long inputLength) {
return decode(input, output, inputLength);
}
}
y
public class CodecX64 : ICodec {
private const string dllFileName = @"Codec.x64.dll";
[DllImport(dllFileName)]
static extern int decode(IntPtr input, IntPtr output, long inputLength);
public int Decode(IntPtr input, IntPtr output, long inputLength) {
return decode(input, output, inputLength);
}
}
Y finalmente haga una fábrica que escoja la correcta para usted:
public class CodecFactory {
ICodec instance = null;
public ICodec GetCodec() {
if (instance == null) {
if (IntPtr.Size == 4) {
instance = new CodecX86();
} else if (IntPtr.Size == 8) {
instance = new CodecX64();
} else {
throw new NotSupportedException("Unknown platform");
}
}
return instance;
}
}
Como las DLL se cargan de forma perezosa la primera vez que se invocan, en realidad esto funciona, a pesar de que cada plataforma solo puede cargar la versión que es nativa de ella. Ver this article para una explicación más detallada.
yo diría que la mayoría de las veces no se molestan - a menos que usted espera que su aplicación utilice cerca de 2 GB de RAM simplemente hacer que su objetivo x86 proyecto solo, y se ejecutará en todas partes con solo la versión de 32 bits de scilexer.dll. –