Я загружаю MFC dll с зависимостями (скажем, я загружаю D.dll, который зависит от C.dll, B.dll и A.dll) на C #. Вот мой код:
[DllImport( "kernel32.dll", CharSet = CharSet.Auto, SetLastError = true )]
static extern IntPtr LoadLibrary( string lpFileName );
private void btn_Click( object sender, EventArgs e )
{
int nUltErr;
string strDLL;
StringBuilder strPDF;
StringBuilder strXML;
strDLL = "C:\\DEVELOP\\Libs\\Interfaccia\\Interfaccia_C_2005\\DLL\\Interfaccia_C_2005.dll";
strFile1 = new StringBuilder( @"C:\DEVELOP\Libs\Interfaccia\TestCase\PROGRAM\tiger.pdf" );
strFile2 = new StringBuilder( @"C:\DEVELOP\Libs\Interfaccia\TestCase\PROGRAM\tiger.XML" );
if( LoadLibrary( strDLL ) != IntPtr.Zero )
{
LoadPDF( strPDF );
SaveXML( strXML );
ClosePDF();
FreeMemory();
}
else
{
nUltErr = Marshal.GetLastWin32Error();
MessageBox.Show( "Errore nel caricamento della dll." );
}
}
nUltErr равно 1008 = 0x3F0, это должно быть ERROR_NO_TOKEN. Что именно это означает в C #? Путь к DLL правильный.
DllImportAttribute.SetLastError
по умолчаниюfalse
. Ваше определение импорта не меняет поведения по умолчанию. УстановитеSetLastError = true
явно, чтобы получить код ошибки, вызваннойLoadLibrary
. - person Dennis   schedule 15.05.2013