Для дальнейших неприятностей вы могли бы позвонить
Marshal.GetLastWin32Error();
, который должен дать вам код ошибки.
Возможно ли, что вы развернули отладочную версию своей родной библиотеки DLL, для которой также требуется отладочная версия MSVCR90 D .DLL? Вы должны были распространить версию выпуска, потому что отладочная версия требует наличия другого набора библиотек в целевой системе.
Очевидно, что он работает на компьютере разработчика, поскольку все отладочные версии необходимых библиотек поставляются с Visual Studio.
Так вы получите сообщение, содержащее код ошибки:
[DllImport("kernel32.dll")]
private static extern int FormatMessage(int dwFlags,
IntPtr lpSource, int dwMessageId, int dwLanguageId,
out string lpBuffer, int nSize, IntPtr pArguments);
public static string GetErrorMessage(int errorCode)
{
const int FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100;
const int FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200;
const int FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000;
string lpMsgBuf;
int dwFlags = FORMAT_MESSAGE_ALLOCATE_BUFFER
| FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS;
int retVal = FormatMessage(dwFlags, IntPtr.Zero, errorCode, 0,
out lpMsgBuf, 0, IntPtr.Zero);
if (0 == retVal)
{
return null;
}
return lpMsgBuf;
}