سؤال

لدي مكتبة صف بسيطة أستخدمها في Excel. هذا تبسيط لصفتي ...

using System;
using System.Runtime.InteropServices;

namespace SimpleLibrary
{
 [ComVisible(true)]
 public interface ISixGenerator
 {
  int Six();
 }

 public class SixGenerator : ISixGenerator
 {
  public int Six() 
  {
   return 6; 
  }
 }
}

في Excel 2007 ، سأقوم بإنشاء مصنف مكون من الماكرو وإضافة وحدة نمطية مع الكود التالي:

Public Function GetSix()
    Dim lib As SimpleLibrary.SixGenerator
    lib = New SimpleLibrary.SixGenerator
    Six = lib.Six
End Function

ثم في Excel يمكنني الاتصال بالوظيفة GetSix () وسيعود ستة. هذا لم يعد يعمل في Excel 2010 64bit. أحصل على خطأ في وقت التشغيل "429": لا يمكن لمكون ActiveX إنشاء كائن.

لقد حاولت تغيير هدف النظام الأساسي إلى X64 بدلاً من أي وحدة المعالجة المركزية ، ولكن بعد ذلك لن يتم تجميع الكود الخاص بي إلا إذا قمت بإلغاء تحديد خيار التسجيل لـ COM Interop ، فإن القيام بذلك يجعله حتى لا يمكن لماكرو المصنف الماكرو رؤية simplelibrary.dll لأنه لم يعد يتم تسجيله .

أي أفكار كيف يمكنني استخدام مكتبتي مع Excel 2010 64 Bit؟

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

المحلول

لم تقم بالتفصيل بالتفصيل كيف أنشأت مجموعة .NET الخاصة بك. ومع ذلك ، هناك عدد معين من الخطوات المطلوبة لفضح التجميع إلى com:

  • أضف السمات التالية إلى الكود الخاص بك:

    using System;
    using System.Runtime.InteropServices;
    
    namespace SimpleLibrary
    {
        [ComVisible(true)]
        [Guid("71F645D0-AA78-4447-BA26-3A2443FDA691")]
        public interface ISixGenerator
        {
            int Six();
        }
    
        [ComVisible(true)]
        [ProgId("SimpleLibrary.SixGenerator")]
        [Guid("8D59E0F6-4AE3-4A6C-A4D9-DFE06EC5A514")]
        [ClassInterface(ClassInterfaceType.AutoDispatch)]
        public class SixGenerator : ISixGenerator
        {
            [DispId(1)]
            public int Six()
            {
                return 6;
            }
        }
    }        
    
  • يجب توقيع التجميع الخاص بك (المشروع -> الخصائص ... -> التوقيع, ، قم بإنشاء ملف مفتاح قوي وتحديد المربع للتوقيع على التجميع

  • الأمر التالي ضروري لتسجيل التجميع (كل ذلك في سطر واحد):

    C:\Windows\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe 
                      SimpleLibrary.dll /tlb SimpleLibrary.tlb /codebase
    

    هذا ينشئ ملف مكتبة نوع tlb الذي سيتعين عليك الإشارة إليه من مشروع VBA الخاص بك (أدوات -> المراجع -> تصفح ... في محرر VBA الخاص بك)

  • اضبط رمز VBA:

    Public Function GetSix()
        Dim lib As SimpleLibrary.SixGenerator
        Set lib = New SimpleLibrary.SixGenerator
        GetSix = lib.Six
    End Function
    

ستجد الخطوات الموضحة بمزيد من التفصيل في هذه المقالة حول قاعدة بيانات دعم Microsoft:

كيفية استدعاء مجموعة Visual Basic .NET أو Visual Basic 2005 من Visual Basic 6.0

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