تحديد التعيين أحرف

DllImportAttribute.CharSetحقل التحكم في التنظيم والإرسال سلسلة و يحدد كيفية استدعاء النظام الأساسي للبحث عن أسماء الدالات في DLL. يصف هذا الموضوع كل من السلوكيات.

يصدّر بعض واجهات برمجة التطبيقات إصدارين من الدالات التي تأخذ سلسلة الوسيطات: تضييق (‏‫ANSI) و ككل (Unicode). واجهة برمجة تطبيقات Win32، على سبيل المثال، تشتمل على إدخال-أشر أسماء دالة MessageBox:

  • MessageBoxA

    يوفر تنسيق ‏‫ANSI الأحرف أحادي البايت بطول، عن "A" إلحاق إلى اسم يؤشر الإدخال. المكالمات إلى MessageBoxA دائماً سلاسل تنظيم وإرسال بتنسيق ‏‫ANSI، ك هو الشائعة في الأنظمة الأساسية لنظام التشغيل ‏‫نظام التشغيل Windows 95 و ‏‫نظام التشغيل Windows 98.

  • MessageBoxW

    يوفر تنسيق Unicode حرف ثنائي البايت بطول، عن "W" إلحاق إلى اسم يؤشر الإدخال. المكالمات إلى MessageBoxW دائماً سلاسل التنظيم بتنسيق Unicode، ك هو الشائعة في الأنظمة الأساسية لنظام التشغيل Windows NT أو ‏‫نظام التشغيل Windows 2000 ونظام التشغيل ‏‫نظام التشغيل Windows XP.

التنظيم والإرسال السلسلة و اسم مطابقة

فئة الحروف حقل تقبل قيم التالية:

فئة الحروف.‏‫ANSI(الافتراضي القيمة)

  • سلسلة أحرف يتم التنظيم والإرسال

    استدعاء النظام الأساسي marshals سلاسل من تنسيق ‏‫ANSI إلى مدارة بتنسيق (Unicode) الخاصة بهم.

  • اسم مطابقة

    عند DllImportAttribute.ExactSpellingالحقول هو صحيحاً ، كما هو بشكل افتراضي في Visual Basic 2005، استدعاء النظام الأساسي للبحث عن الاسم الذي تحدده فقط. على سبيل المثال، إذا قمت بتحديد من MessageBox، النظام الأساسي استدعاء يبحث عن من MessageBox وفشل عند فإنه لا يمكن بحث نفس الهجاء.

    عندما من ExactSpelling الحقل هو خطأالتي تعرف عنك، كما هو بشكل افتراضي في C + + و C#، استدعاء النظام الأساسي للبحث عن unmangled اسم مستعار أول ( من MessageBox)، ثم اسم mangled ( من MessageBoxA) إذا كان اسم مستعار unmangled هو غير موجود. لاحظ أن سلوك مطابقة اسم ‏‫ANSI يختلف عن سلوك مطابقة اسم Unicode.

فئة الحروف.Unicode

  • سلسلة أحرف يتم التنظيم والإرسال

    استدعاء النظام الأساسي لسلاسل النسخ من مدارة تنسيق (Unicode) بتنسيق Unicode.

  • اسم مطابقة

    عندما يكون الحقل ExactSpelling صحيحاً ، كما بشكل افتراضي في Visual Basic 2005، استدعاء النظام الأساسي للبحث عن الاسم الذي تحدده فقط. على سبيل المثال، إذا قمت بتحديد من MessageBoxاستدعاء النظام الأساسي للبحث عن من MessageBox و يفشل إذا أنه لا يمكن بحث نفس الهجاء.

    عندما من ExactSpelling الحقل هو falseالتي تعرف عنك، كما هو بشكل افتراضي في C + + و C#، استدعاء النظام الأساسي للبحث عن mangled الاسم أول ( MessageBoxW )، ثم اسم مستعار unmangled ( من MessageBox) إذا كان اسم mangled هو غير موجود. لاحظ أن Unicode سلوك مطابقة اسم يختلف عن سلوك مطابقة اسم ‏‫ANSI.

فئة الحروف.تلقائي

  • استدعاء النظام الأساسي يختار بين تنسيق ‏‫ANSI و Unicode عند تشغيل الوقت، استناداً إلى النظام الأساسي الهدف.

تحديد التعيين أحرف في Visual أساسى

دالة MessageBox التصريح المثال التالي ثلاث مرة/مرات، في كل مرة بمختلف حرف-تعيين السلوك. يمكنك تحديد سلوك التعيين الأحرف في Visual أساسى بإضافة ‏‫ANSI من Unicodeأو أساسى Au إلى إلى عبارة تعريف.

إذا قمت بحذف الكلمة الأساسية التعيين الأحرف، كما تم أول عبارة التصريح، DllImportAttribute.CharSetافتراضيات للحقل إلى التعيين أحرف ‏‫ANSI. تحديد عبارات الثاني والثالث في المثال بشكل واضح التعيين أحرف بكلمة أساسية.

Imports System.Runtime.InteropServices

Public Class Win32
   Declare Function MessageBoxA Lib "user32.dll"(ByVal hWnd As Integer, _
       ByVal txt As String, ByVal caption As String, _
       ByVal Typ As Integer) As Integer

   Declare Unicode Function MessageBoxW Lib "user32.dll" _
       (ByVal hWnd As Integer, ByVal txt As String, _
        ByVal caption As String, ByVal Typ As Integer) As Integer

   Declare Auto Function MessageBox Lib "user32.dll" _
       (ByVal hWnd As Integer, ByVal txt As String, _
        ByVal caption As String, ByVal Typ As Integer) As Integer
End Class

تحديد التعيين أحرف في C# و C + +

DllImportAttribute.CharSetيعرف الحقل المصدر مجموعة أحرف ‏‫ANSI أو Unicode. مجموعة أحرف التحكم في كيفية يجب أن يمكن تنظيم سلسلة وسيطة إلى أسلوب. استخدم واحد النماذج التالية للإشارة إلى التعيين أحرف:

[DllImport("dllname", CharSet=CharSet.Ansi)]
[DllImport("dllname", CharSet=CharSet.Unicode)]
[DllImport("dllname", CharSet=CharSet.Auto)]
[DllImport("dllname", CharSet=CharSet::Ansi)]
[DllImport("dllname", CharSet=CharSet::Unicode)]
[DllImport("dllname", CharSet=CharSet::Auto)]

يظهر المثال التالي ثلاث ملفات تعريف المدارة دالة MessageBox الذي سببا إلى تحديد التعيين أحرف. في تعريف أولاً، قبل الحذف الخاص به، فئة الحروف الحقل القيم الافتراضية إلى مجموعة أحرف ‏‫ANSI.

[DllImport("user32.dll")]
    public static extern int MessageBoxA(int hWnd, String text, 
        String caption, uint type);
[DllImport("user32.dll", CharSet=CharSet.Unicode)]
    public static extern int MessageBoxW(int hWnd, String text, 
        String caption, uint type);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
    public static extern int MessageBox(int hWnd, String text, 
        String caption, uint type);
typedef void* HWND;

//Can use MessageBox or MessageBoxA.
[DllImport("user32")]
extern "C" int MessageBox(HWND hWnd,
                          String* pText,
                          String* pCaption,
                          unsigned int uType);

//Can use MessageBox or MessageBoxW.
[DllImport("user32", CharSet=CharSet::Unicode)]
extern "C" int MessageBoxW(HWND hWnd,
                          String* pText,
                          String* pCaption,
                          unsigned int uType);

//Must use MessageBox.
[DllImport("user32", CharSet=CharSet::Auto)]
extern "C" int MessageBox(HWND hWnd,
                          String* pText,
                          String* pCaption,
                          unsigned int uType);

راجع أيضًا:

المرجع

DllImportAttribute

المبادئ

قم بإنشاء النماذج الأولية في تعليمات برمجية المدارة

استدعاء النظام الأساسي أمثلة

موارد أخرى

استدعاء التنظيم والإرسال بيانات بالنظام الأساسي