最近までサービスを x86 として実行していましたが、Any CPU に変更して、64 ビット DLL を使用したいくつかの新しい機能を導入しました。サード パーティの DLL の残りの 1 つが 32 ビットでした。そのための DLL サロゲートをレジストリにセットアップしましたが、それは解決策の半分にすぎません。
inProc で実行されなくなったため、メモリ内に作成されているポインターにアクセスできないと思われます。私が知る必要があるのは、System.Runtime.InteropServices.Marshall オブジェクトを使用して、返されたポインターにアクセスする方法です。
前もって感謝します。
public Image GetThumbnail(string strFilename)
{
SeThumbnailExtractor objExtractor = new SeThumbnailExtractor();
int hImageSE;
Image objImage = null;
try
{
objExtractor.GetThumbnail(strFilename, out hImageSE);
IntPtr iPImage = new IntPtr(hImageSE);
//fails below
objImage = Image.FromHbitmap(iPImage);
_ReturnedImage = objImage;
_SourceFile = strFilename;
Marshal.FreeHGlobal(iPImage);
}
catch (Exception ex)
{
_ErrorMsg = "ERROR: " + ex.Message.ToString();
}
if (objExtractor != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(objExtractor);
objExtractor = null;
}
return objImage;
}