Даже лучше, чем предложение Ran использовать GetProcAddress, просто вызовите LoadLibrary перед любыми вызовами функций DllImport (только с именем файла без пути), и они автоматически загружают загруженный модуль.
Я использовал этот метод для выбора во время выполнения, загружать ли 32-разрядную или 64-разрядную родную DLL без необходимости изменять кучу функций P / Invoke-d. Прикрепите код загрузки в статическом конструкторе для типа, который имеет импортированные функции, и все будет работать нормально.