سؤال

لدي طريقة في .NET (C#) والتي ترجع string[][].عند استخدام RegAsm أو TlbExp (من .NET 2.0 SDK) لخلق نوع COM مكتبة تحتوي الجمعية على التحذير التالية:

تحذير:لا يوجد تنظيم دعم متداخلة المصفوفات.

هذا التحذير النتائج في طريقة السؤال لا يتم تصديرها إلى إنشاء مكتبة نوع.لقد قيل لي هناك طرق للتغلب على هذا باستخدام البديل COM نوع الإرجاع ثم صب/الخ على كوم من جانب العميل.لهذه الجمعية ، الهدف العميل الجمهور هو VB6. ولكن كيف يمكنك أن تفعل في الواقع هذا على .صافي الجانب ؟

ملاحظة:لدي القديمة القائمة DLL (مع تصدير نوع المكتبة) حيث نوع الإرجاع هو البديل ، ولكن هذا DLL (و .tlb) يتم إنشاؤها باستخدام pre-.NET والأدوات القديمة ، لذا لا يمكن استخدامها.

من شأنه أن يساعد إذا كان مكتوب في VB.NET بدلا من ذلك ؟

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

المحلول

حتى إذا كنت تريد العودة كائن (الذي خرائط البديل في Interop COM) هذا لا يحل المشكلة.VB سوف تكون قادرة على "عقد" على ذلك "مررها" ، لكنها لن تكون قادرة على فعل أي شيء معها.

من الناحية الفنية لا يوجد ما يعادل الدقيق في VB عن سلسلة[][].ومع ذلك ، إذا كان الصفيف الخاص بك ليست "خشنة" (أي أن جميع الفرعية المصفوفات هي نفس طول), يجب أن تكون قادرا على استخدام صفيف ثنائي الأبعاد الخاصة بك نوع الإرجاع.Interop COM ينبغي أن تكون قادرة على ترجمة ذلك.

string [,] myReturnValue = new string[rowCount,colCount];

إذا كان الخاص بك طريقة رسميا بإرجاع كائن (والتي سوف تبدو وكأنها البديل إلى VB) أو سلسلة [ ، ] (والتي سوف تبدو وكأنها مجموعة من السلاسل في VB), ما هو مادي.صفيف سلسلة هو أجمل العودة ، ولكن ليس شرطا.

إذا كنت مجموعة هو خشنة, ثم كنت ستطبعها إلى أن تأتي مع طريقة مختلفة.على سبيل المثال ، يمكنك اختيار لجعل العودة 2D مجموعة كبيرة قدر أكبر من الباطن المصفوفات ، ومن ثم تمرير طول المعلومات في فصل [من] int[] المعلمة ، بحيث VB يمكن معرفة العناصر التي يتم استخدامها.

نصائح أخرى

أي ما يعادل البديل في C# هو النظام.الكائن.لذلك قد ترغب في محاولة للعودة في النتيجة يلقي الاعتراض و ذلك على الجانب الآخر باعتباره البديل.

VB لا يملك أية منشآت C# يفتقر ، لذا أشك في أنه سيكون أفضل أو أسهل إذا .صافي جانب كتب في VB.

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