All articles

.NET fw. platform invoke 64 biten

Published 2009-01-26 - Last modified 2009-01-26

Original: https://soci.hu/blog/index.php/2009/01/26/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.