قم بإنشاء النماذج الأولية في تعليمات برمجية المدارة
يصف هذا الموضوع كيفية الوصول إلى وظائف غير مدار و يقدم عدة حقول سمات إضافة تعليق توضيحي له تعريف الأسلوب في تعليمات برمجية مُدارة. للأمثلة التي توضح كيفية إنشاء استدعاء المستندة إلى.NET تصريحات للاستخدام مع النظام الأساسي، راجع التنظيم والإرسال بيانات باستخدام "استدعاء النظام الأساسي".
قبل أن يمكنك الوصول إلى دالة DLL غير مدارة من تعليمات برمجية مُدارة، يجب عليك معرفة اسم الدالة و اسم مكتبة الارتباط الحيوي التي يصدرها عليه. بترتيب هو المعلومات، يمكنك بدء كتابة تعريف المدارة للعمل مدار هو في ملف DLL. علاوة على ذلك، يمكنك ضبط الطريقة استدعاء النظام الأساسي لهذه دالة بإنشاء و marshals البيانات إلى و عن دالة.
ملاحظة |
---|
تمكين وظائف واجهة برمجة تطبيقات Win32 يخصص سلسلة إلى تحرير السلسلة باستخدام أسلوب مثل LocalFree.استدعاء النظام الأساسي لمعالجة هذه المعلمات بشكل مختلف.للنظام الأساسي استدعاء المكالمات، إجراء معلمة IntPtrنوع عوضاً Stringنوع.استخدم الطرق التي يتم توفيرها بواسطة System.Runtime.InteropServices.Marshalفئة لتحويل النوع يدوياً إلى سلسلة و تحرير يدوياً. |
أساسيات إعلان
إدارة ملفات تعريف إلى تعتبر الدالات غير مدار تعتمد على اللغة، كما ترى في الأمثلة التالية. ل المزيد أمثلة تعليمات برمجية، راجع من أمثلة استدعاء النظام الأساسي.
Imports System.Runtime.InteropServices
Public Class Win32
Declare Auto Function MessageBox Lib "user32.dll" _
(ByVal hWnd As Integer, _
ByVal txt As String, ByVal caption As String, _
ByVal Typ As Integer) As IntPtr
End Class
لتطبيق BestFitMapping، CallingConvention، ExactSpelling، PreserveSig، SetLastError، أو ThrowOnUnmappableCharحقول إلى Microsoft Visual Basic 2005تصريح، يجب أن استخدم DllImportAttributeالسمة بدلاً من Declareالعبارة.
Imports System.Runtime.InteropServices
Public Class Win32
<DllImport ("user32.dll", CharSet := CharSet.Auto)> _
Public Shared Function MessageBox (ByVal hWnd As Integer, _
ByVal txt As String, ByVal caption As String, _
ByVal Typ As Integer) As IntPtr
End Function
End Class
using System.Runtime.InteropServices;
[DllImport("user32.dll")]
public static extern IntPtr MessageBox(int hWnd, String text,
String caption, uint type);
using namespace System::Runtime::InteropServices;
[DllImport("user32.dll")]
extern "C" IntPtr MessageBox(int hWnd, String* pText,
String* pCaption unsigned int uType);
ضبط تعريف
ما إذا كانت تقوم بتعيينها بوضوح أم لا، حقول سمات في العمل بتعريف السلوك مدارة تعليمات برمجية. استدعاء النظام الأساسي يعمل وفقا الافتراضي قيم مجموعة على حقول متنوع موجودة كبيانات التعريف في تجميع. يمكنك تغيير هذا سلوك الافتراضي بواسطة ضبط قيم حقول أو أكثر. في معظم الحالات، يمكنك استخدام DllImportAttributeإلى تعيين قيمة.
يسرد الجدول التالي التعيين كاملة من حقول سمات تتعلق إلى استدعاء النظام الأساسي. بالنسبة لكل حقل، يتضمن الجدول الافتراضي الالقيمة وارتباط للحصول تشغيل معلومات حول استخدام هذه حقول لتعريف دالات DLL غير مدار.
الحقل |
الوصف |
---|---|
تمكين أو تعطيل الأكثر تناسبا للتعيين. |
|
تعين اصطلاح استدعاء إلى تستخدم في تمرير الأسلوب وسيطات. القيمة الافتراضية هو WinAPI، الذي يتوافق مع __stdcall32-بت المستندة إلى Intel الأنظمة الأساسية. |
|
عناصر التحكم يجب أن يمكن تنظيم mangling الاسم والطريقة التي سلسلة وسيطة للدالة. يكون الإعداد الافتراضي هو CharSet.Ansi. |
|
تقوم بتحديد يؤشر إدخال ملف DLL إلى يمكن استدعاء. |
|
عناصر التحكم ما إذا كان يجب تعديلها يؤشر إدخال لتتوافق مع التعيين الأحرف. تختلف القيمة افتراضية حسب لغة البرمجة. |
|
عناصر التحكم فيما إذا كان مدار أسلوب يجب أن يتم تحويل التوقيع إلى غير مدار توقيع بريد إرجاع HRESULT ويحتوي على وسيطة إضافى retval] [خارج، لقيمة الإرجاع. الافتراضي هو true(the توقيع should not be transformed). |
|
تمكن المتصل باستخدام Marshal.GetLastWin32Errorدالة API لتحديد ما إذا حدث خطأ أثناء تنفيذ الأسلوب. في Visual أساسى، يكون الافتراضي هو true؛ في C# و C + +، يكون الافتراضي false. |
|
يتحكم بالتخلص من استثناء تشغيل حرف Unicode unmappable يتم تحويلها إلى ANSI "؟" حرف. |
لمعلومات مرجعية مُفصل، راجع فئة DllImportAttribute.
راجع أيضًا:
المبادئ
التي تستخدم دالات DLL غير مدار
استدعاء النظام الأساسي اعتبارات الأمان
التعرف على وظائف في مكتبات الارتباط الديناميكي
قم بإنشاء دالات DLL إلى الضغط على فئة