Jusqu'à récemment, nous utilisions un service en tant que x86, mais nous l'avons remplacé par Tout processeur à utiliser pour introduire de nouvelles fonctionnalités en utilisant une DLL 64 bits. L'une des DLL tierces restantes était 32 bits. J'ai installé un substitut de DLL pour cela dans le registre, mais ce n'est que la moitié de la solution.Pointeurs utilisant une DLL 32 bits dans un service 64 bits
Je soupçonne que le pointeur en mémoire n'est pas accessible car il n'est plus exécuté dansProc. Ce que je dois savoir, c'est comment utiliser l'objet System.Runtime.InteropServices.Marshall pour avoir accès au pointeur retourné.
Merci d'avance.
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;
}
Merci pour votre explication claire et concise. J'en suis arrivé au point où j'ai dû diviser la fonctionnalité du programme en deux services. Le 64bit avec la fonctionnalité principale, puis un petit 32bit avec les fonctionnalités restantes. Nous sommes coincés là jusqu'à ce que le fournisseur se réveille à l'informatique 64 bits. – BigBadOwl