Tôi đã viết một DLL trong .NET và tôi muốn truy cập nó trong VBScript. Tôi không muốn thêm nó vào thư mục lắp ráp.Truy cập tệp DLL tùy chỉnh .NET trong VBScript
Có cách nào để trỏ quá DLL và tạo một phiên bản của nó không?
Tôi đã viết một DLL trong .NET và tôi muốn truy cập nó trong VBScript. Tôi không muốn thêm nó vào thư mục lắp ráp.Truy cập tệp DLL tùy chỉnh .NET trong VBScript
Có cách nào để trỏ quá DLL và tạo một phiên bản của nó không?
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.
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.
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 ...
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:
Đả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)]
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
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:
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).
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í.
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"
Làm thế nào để bạn unregister khi bạn làm điều đó? –
regasm your.dll/unregister – huseyint