سؤال

لم أجد بعد مرجعا جيدا في هذا الموضوع. لهذا المثال، سنأخذ بعض التعليمات البرمجية C ++ التي أحاول تشغيلها إلى C #.

في الأرض C ++ لدينا النموذج الأولي التالي لوظيفة مكتبة خارجية:

extern "C" DWORD EXPORT FILES_GetMemoryMapping(
  PSTR pPathFile,
  PWORD Size,
  PSTR MapName,
  PWORD PacketSize,
  PMAPPING pMapping,
  PBYTE PagesPerSector);

وفي ذلك يستخدم مثل هذا:

FILES_GetMemoryMapping((LPSTR)(LPCTSTR)MapFile, &Size, (LPSTR)MapName, &PacketSize, pMapping, &PagePerSector);

الآن أحاول أن أمنف الخط الأول إلى C # وهنا هو المكان الذي قدم فيه أي مسار واضح.

هذا ما لدي حتى الآن:

[DllImport("Files.DLL")]
public static extern uint FILES_GetMemoryMapping(
    [MarshalAs(UnmanagedType.LPStr)]
    string pPathFile,
    out ushort Size,
    [MarshalAs(UnmanagedType.LPStr)]
    string MapName,
    out ushort PacketSize,
    IntPtr pMapping,
    out byte PagesPerSector);

الآن السؤال هو: هل هناك أي دليل جيد هناك يخبرني أن "pstr patrathfile" يجب أن يكون [marshalas (unmanagedtype.lpstr)] سلسلة pathffile" ... على افتراض أن هذا صحيح؟

أو، أما أن مؤشر "Prapapping" يصبح "خارج Intptr Patterpapping" ... على افتراض أن هذا صحيح؟

أي مساعدة على هذا الرجال؟

هل كانت مفيدة؟

المحلول

لم أجد بعد مرجعا جيدا في هذا الموضوع

ها أنت ذا.

الغريب، الموقع في الوقت الحالي، لكنه مورد جيد للغاية لمشاكل التهام. في الوقت نفسه، يمكنك استخدام أرشيف Archive.net في Pinvoke.net في http:/web.archive.org/web/20080202041852/http://www.pinvoke.net.

نصائح أخرى

هذا يبدو صحيحا. أول جزء من سؤالك (المتعلق بالنشالاس) يروي المحول البرمجي لتحويل المتغير C # المدارة إلى PSTR. يشير التنظيم في بيئة .NET إلى نقل البيانات بين البيئة المدارة وغير المدارة. هذه الصفات (من بين العديد من الآخرين) أخبر المحول البرمجي كيفية القيام بذلك على وجه التحديد.

تشير النقطة الثانية إلى أنها ستزول مؤشر إلى الهيكل. نوع INTPTR في .NET هو نوع مدار يستخدم للاحتفاظ بقطعة معينة من الذاكرة. في World .NET، لا توجد مؤشرات (عموما)، على الرغم من وجود أنواع مرجعية. تتم إدارة المؤشر والتعامل معنا من قبل CLR. يتم استخدام بنية IntPTR عند مؤشرات تنظيم هياكل البيانات أو أنواع البدائية

بالإضافة الى P / invoke. موقع، آدم ناثان.NET و COM: دليل التشغيل البيني الكامل هو شيء من المفيد مضيفا إلى رف الكتب الخاص بك إذا كنت أكثر من مصلحة متابعة في .NET Interop.

كيف

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top