Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.

January 26, 2009 / by Zsolt Soczó

.NET fw. platform invoke 64 biten

Egy apró érdekesség. Van egy 32 bites windows dll, amit a gyártó még nem írt meg 64 bitre. Ezt .NET-ből a jól ismert DllImport attribútummal, PInvoke segítségével lehet meghívni. 64 bites gépen azonban alapértelmezetten a C# fordító olyan assemblyket generál, amelyek platform függetlenek, így 64 bites osen a jitter 64 bites gépikódot generál. Persze, így már nem tudja betölteni a 32 bites DLL-t a pinvoke, és elszáll a program hibával, amikor először hívnánk egy függvényt a DLL-ből. A megoldás egyszerű: meg kell jelölni a projektet, hogy x86-ra forduljon. Ettől az IL kód persze nem változik, de a metadatok között ott lesz a jelzés a jitternek, hogy tessék 32 bites kódot generálni.
A bosszantó ebben az esetben csak az, hogy azért lett volna jó a natív 64 bites memóriamodell, mert tényleg gigabájtnyi adatot akartam a memóriában kezelni.

Could you hire me? Contact me if you like what I’ve done in this article and think I can create value for your company with my skills.