2008-12-05 28 views

Trả lời

5

Bạn có thể đăng ký tệp .dll .NET đó bằng regasm utility bằng cách chỉ định tham số /codebase. Tham số này không được khuyến khích sử dụng với các assembly chưa được ký nhưng nó hoạt động khi bạn không thể đưa assembly của bạn vào GAC.

regasm your.dll /codebase 

Xin lưu ý rằng bạn không nên thay đổi đường dẫn .dll sau thao tác này vì nó chèn đường dẫn này vào sổ đăng ký Windows.

+0

Làm thế nào để bạn unregister khi bạn làm điều đó? –

+1

regasm your.dll/unregister – huseyint

1

Không trực tiếp. Bạn sẽ cần một COM Callable Wrapper cho bất kỳ thư viện .NET nào mà bạn sẽ gọi từ COM (và do đó, VBScript). Vì vậy, bạn nên trực tiếp tạo một CCW cho DLL hoặc bạn có thể tạo CCW cho một DLL proxy cung cấp các phương thức chung để nạp một DLL .NET và cung cấp các phương thức cho bạn gọi phương thức thực tế trên thành phần và trả về kết quả. Nó thực sự không sạch sẽ chút nào. Vì vậy, nói chung, câu trả lời là không.

6

Câu trả lời của huseyint là tiền, tuy nhiên, tôi muốn thêm một chút vào đó. Dưới đây là một số mẫu mã tôi đã sử dụng cho vấn đề này rất, có lẽ nó có thể giúp bạn nhanh chóng cùng ...

// 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") 

tôi đã bao gồm một phương pháp IsAlive trong dll ...

Public Function IsAlive() As Boolean 
    Return True 
End Function 

... và có thể kiểm tra xem đã đăng ký một cách chính xác bằng cách sử dụng cú pháp:

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

Hy vọng điều này sẽ giúp người ...

12

tôi chỉ phải làm điều này bản thân mình, phát hiện của tôi là:

Making loại có thể nhìn thấy COM:

  1. Đảm bảo lớp học của bạn là công khai, không tĩnh và có một constructor mặc định nào ví dụ: không đối số.
  2. Đảm bảo phương thức của bạn công khai, không tĩnh.
  3. Đảm bảo bạn có tập hợp sau đây trong lắp ráp của mình - thường là trong AssemblyInfo.cs

    [assembly: ComVisible(true)] 
    
  4. Sau khi xây dựng DLL của bạn, từ SDK dòng lệnh chạy:

    regasm yourdll.dll 
    

    này nên trả lời:

    loại đăng ký thành công

    Nếu bạn nhận được

    regasm: cảnh báo RA0000: Không có loại đã được đăng ký

    thì bạn cần phải thiết lập ComVisible hoặc không có công, các loại không tĩnh.

Từ PowerShell

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

Từ vbs

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

Câu trả lời hay, bạn đã bao gồm từng bước. Cảm ơn rất nhiều. – lidermin

+0

Cảm ơn, điều này giúp một bó. Bước 3 là cái tôi đã mất tích! – mlsteeves

+0

@foolshat .. Đây có phải là Server.CreateObject hoặc CreateObject không – Vani

4

Trong trường hợp ai đó cần phải gỡ rối/bước vào dll Net đó được gọi là từ chỉ VBScript:

  1. Trên màn hình thiết lập gỡ lỗi dự án .Net dll, hãy đặt "bắt đầu chương trình bên ngoài" bằng cách duyệt đến chương trình wscript.exe (nằm trong C: \ WINDOWS \ system32 \ wscript.exe).

  2. Trên "Đối số dòng lệnh", hãy đặt tên tệp và vị trí đường dẫn của tệp VBScript (C: \ Test \ myTest.vbs). Đảm bảo tệp vbs và dll nằm trong cùng một vị trí.

  3. Cuối cùng, trong mã nguồn DLL dự án Net chỉ cần đặt các điểm break và nhấn phím "bắt đầu debug"

Các vấn đề liên quan