سؤال

لقد كتبت ملف DLL في .NET وأريد الوصول إليه في VBScript.لا أريد إضافته إلى دليل التجميع.

هل هناك طريقة للإشارة أيضًا إلى ملف DLL وإنشاء مثيل له؟

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

المحلول

ويمكنك تسجيل ذلك DLL. NET مع regasm فائدة بواسطة تحديد المعلمة /codebase. لا يتم تشجيع هذه المعلمة لاستخدامها مع المجالس غير موقعة ولكنه يعمل عندما لا يمكنك وضع التجميع الخاص بك في GAC.

regasm your.dll /codebase

تجدر الإشارة أنه لا ينبغي عليك تغيير مسار. DLL الخاص بك بعد هذه العملية لأنه يدرج هذا المسار في سجل ويندوز.

نصائح أخرى

كان علي أن أفعل هذا بنفسي، وكانت النتائج التي توصلت إليها هي:

جعل الأنواع مرئية لـ COM:

  1. تأكد من أن فصلك عام وغير ثابت ويحتوي على مُنشئ افتراضي عام، أي.لا الحجج.
  2. تأكد من أن طريقتك عامة وغير ثابتة.
  3. تأكد من أن لديك المجموعة التالية في التجميع الخاص بك - عادةً في AssemblyInfo.cs

    [assembly: ComVisible(true)]
    
  4. بعد إنشاء ملف DLL الخاص بك، قم بتشغيل سطر أوامر SDK:

    regasm yourdll.dll
    

    يجب أن يستجيب هذا:

    تم تسجيل الأنواع بنجاح

    إذا حصلت

    رياسم:تحذير RA0000:لم يتم تسجيل أي أنواع

    فأنت بحاجة إلى ضبط ComVisible أو لا تحتوي على أنواع عامة وغير ثابتة.

من بوويرشيل

$a = New-Object -comobject Your.Utils.Logging
$a.WriteError2("Application", "hello",1,1)

من برنامج vbs

Set logger = CreateObject("Your.Utils.Logging")
logger.WriteError2 "Application", "hello from vbs",1,1 

والجواب huseyint كان على المال، ومع ذلك، كنت أريد أن أضيف قليلا لذلك. وفيما يلي بعض نموذج التعليمات البرمجية استعملتها لهذه المسألة بالذات، وربما يمكن أن تسرع لك على طول ...

// bind a variabe to WScript.Shell
Set WshShell = CreateObject("WScript.Shell")

// define the path to the regasm.exe file
RegAsmPath = "c:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe"

// register the dll
WshShell.run "cmd /c " & RegAsmPath & " c:\temp\cbsecurity.dll /codebase /nologo /s", 0, True

// bind a variable to the dll
Set cbUtil = CreateObject("CBSecurity.Utilities")

وكنت قد اشتمل على طريقة IsAlive في دلل ...

Public Function IsAlive() As Boolean
    Return True
End Function

... ويمكن التحقق من أنه مسجل بشكل صحيح باستخدام بناء الجملة:

//check if dll is available to your code
msgbox "cbUtil is alive: " & cbUtil.IsAlive

وآمل أن يساعد هذا شخص ما ...

في حالة احتياج شخص ما إلى تصحيح الأخطاء/الدخول إلى ملف .Net dll الذي يتم استدعاؤه من VBScript فقط:

  1. في شاشة إعداد تصحيح أخطاء مشروع .Net dll، قم بتعيين "بدء تشغيل البرنامج الخارجي" عن طريق الاستعراض للوصول إلى برنامج wscript.exe (الموجود في C:\WINDOWS\system32\wscript.exe).

  2. في "وسائط سطر الأوامر"، قم بتعيين اسم الملف وموقع المسار لملف VBScript (C: est\myTest.vbs).تأكد من وجود ملف vbs وملف dll في نفس الموقع.

  3. أخيرًا، في الكود المصدري لمشروع .Net DLL، ما عليك سوى تعيين نقطة التوقف والضغط على "بدء التصحيح"

وليس مباشرة. عليك ان تحصل على استدعاء التفاف COM إلى أي مكتبة. NET عليك الاتصال من COM (وبالتالي، فبسكريبت). ولذلك، يجب إما إنشاء مباشرة CCW إلى DLL أو يمكنك إنشاء CCW لDLL الوكيل الذي يوفر طرق عامة لتحميل DLL. NET و توفير طرق بالنسبة لك أن استدعاء الأساليب الفعلية على عنصر وإرجاع النتيجة. انها حقا ليست نظيفة على الإطلاق. لذلك، بصفة عامة، فإن الجواب هو لا.

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