In C#, sto provando a PInvoke una funzione "semplice" che ho in C++. Il problema è che non conosco il nome o la posizione della libreria in fase di compilazione. In C++, questo è facile:PInvoke quando non si conosce la DLL al momento della compilazione?
typedef HRESULT (*SomeFuncSig)(int, IUnknown *, IUnknown **);
const char *lib = "someLib.dll"; // Calculated at runtime
HMODULE mod = LoadLibrary(lib);
SomeFuncSig func = (SomeFuncSig)GetProcAddress("MyMethod");
IUnknown *in = GetSomeParam();
IUnknown *out = NULL;
HRESULT hr = func(12345, in, &out);
// Leave module loaded to continue using foo.
Per la vita di me non riesco a capire come fare questo in C#. Non avrei alcun problema se sapessi il nome dll, sarebbe risultato qualcosa come questo:
[DllImport("someLib.dll")]
uint MyMethod(int i,
[In, MarshalAs(UnmanagedType.Interface)] IUnknown input,
[Out, MarshalAs(UnmanagedType.Interface)] out IUnknown output);
Come posso fare questo senza conoscere il dll sto caricando da al momento della compilazione?
Mi manca qualcosa? Per utilizzare LoadLibrary è necessario * conoscere * il nome della DLL. Se l'OP _knew_ il nome della DLL non tenterebbe di trovare una soluzione diversa in primo luogo. Modifica: penso di aver perso "in fase di compilazione" rispetto a "in fase di esecuzione". –