Есть библиотека на Delphi. У нее функция, которая рисует изображение и возвращает его HBitmap:
function TRGOpenHandle(FileName:PAnsiChar; Release:boolean):LongWord; stdcall; export;<br/>
begin<br/>
if FActive then<br/>
begin<br/>
try<br/>
TRG.Clear;<br/>
TRG.ClearBackground;<br/>
TRG.LoadFromFile(FileName);<br/>
TRG.ClearBackground;<br/>
if Release then result:=TRG.Image.Picture.Bitmap.ReleaseHandle<br/>
else result:=TRG.Image.Picture.Bitmap.Handle;<br/>
except on E:Exception do<br/>
begin<br/>
MessageBox(0, PAnsiChar(E.Message), 'TRG.DLL', MB_OK + MB_ICONWARNING);<br/>
FActive:=false;<br/>
result:=0;<br/>
end;<br/>
end;<br/>
end else<br/>
begin<br/>
result:=0;<br/>
end;<br/>
end;
Если вызывать эту dll из приложения на Delphi, то все работает нормально, изображение отрисовывается. Если вызывать dll из приложения на C#, то изображение неотрисовывается, Image заливается просто белым цветом.
Вызов из C#:
LibWrap.TRGInit();<br/>
bmp = Bitmap.FromHbitmap((IntPtr)LibWrap.TRGOpenHandle(files[i], false));<br/>
files[i] = System.IO.Path.GetFileNameWithoutExtension(files[i]);<br/>
bmp.Save(tiffPath + "\\" + files[i] + ".tif", System.Drawing.Imaging.ImageFormat.Tiff);
Стоит только добавить в функцию dll вызов модального окна (именно модального), то и в c# все отрисовываетяс отлично. Но работать с постоянно выскакивающими модальными окнами невозможно. Что можно сделать?
Код функции при добавлении вызова модального окна:
function TRGOpenHandle(FileName:PAnsiChar; Release:boolean):LongWord; stdcall; export;<br/>
begin<br/>
if FActive then<br/>
begin<br/>
try<br/>
TRG.Clear;<br/>
TRG.ClearBackground;<br/>
TRG.LoadFromFile(FileName);<br/>
Form2.ShowModal;<br/>
TRG.ClearBackground;<br/>
if Release then result:=TRG.Image.Picture.Bitmap.ReleaseHandle<br/>
else result:=TRG.Image.Picture.Bitmap.Handle;<br/>
except on E:Exception do<br/>
begin<br/>
MessageBox(0, PAnsiChar(E.Message), 'TRG.DLL', MB_OK + MB_ICONWARNING);<br/>
FActive:=false;<br/>
result:=0;<br/>
end;<br/>
end;<br/>
end else<br/>
begin<br/>
result:=0;<br/>
end;<br/>
end;
Так же отрисовываетяс, но через раз если сделать так:
function TRGOpenHandle(FileName:PAnsiChar; Release:boolean):LongWord; stdcall; export;<br/>
begin<br/>
if FActive then<br/>
begin<br/>
try<br/>
TRG.Clear;<br/>
TRG.ClearBackground;<br/>
TRG.LoadFromFile(FileName);<br/>
TRG.ClearBackground;<br/>
Application.ModalStarted;<br/>
Application.HandleMessage;<br/>
Application.ModalFinished;<br/>
Application.ProcessMessages;<br/>
if Release then result:=TRG.Image.Picture.Bitmap.ReleaseHandle<br/>
else result:=TRG.Image.Picture.Bitmap.Handle;<br/>
except on E:Exception do<br/>
begin<br/>
MessageBox(0, PAnsiChar(E.Message), 'TRG.DLL', MB_OK + MB_ICONWARNING);<br/>
FActive:=false;<br/>
result:=0;<br/>
end;<br/>
end;<br/>
end else<br/>
begin<br/>
result:=0;<br/>
end;<br/>
end;
Подскажите как решить эту проблему, или хотя бы как убивать модальное окно программно. В чем может быть загвоздка, почему именно при вызове модального окна все срабатывает, а без него нет?