2012-03-23 7 views
8

Tôi đã biên dịch mã C# thành một tệp DLL nhưng có ít kinh nghiệm với chúng. Mã C# của tôi chứa một lớp HelloWorld với phương thức tĩnh Print(). Tôi muốn sử dụng DLL này trong VBScript để gọi phương thức Print(). Tôi biết điều này là cơ sở, nhưng tôi đang sử dụng điều này như là một thử nghiệm cho một dự án quy mô lớn hơn mà sẽ được biên dịch để DLL cuối cùng. Tuyên bố trông như thế nào và cách gọi phương thức?Sử dụng các tệp DLL trong VBScript

+1

bản sao có thể có của [Cách gọi hàm C# DLL từ VBScript] (http://stackoverflow.com/questions/769332/how-to-call-c-sharp-dll-function-from-vbscript) – JeffO

+0

Tôi đã làm kiểm tra liên kết, nhưng nó không hoàn toàn nhận được những gì tôi muốn. Tôi đang tìm cách tự động tải các dll tại thời gian chạy thông qua VBScript từ một filepath nhất định hơn là đăng ký với máy chủ. Một lần nữa, dll là rất mới với tôi, vì vậy điều này có thể là những gì đang xảy ra trong câu trả lời đó, tôi chỉ không nhìn thấy nó. – steventnorris

Trả lời

17

Nếu dll của bạn được đăng ký với hệ thống, sử dụng CreateObject với nó là ProgID.

Set myObject = CreateObject("MyReallyCoolObject.HelloWorld") 
myObject.Print 

Nếu đối tượng của bạn chưa được đăng ký trên hệ thống, hãy sử dụng GetObject với đường dẫn đến tệp chứa đối tượng của bạn. Đảm bảo đối tượng của bạn hiển thị giao diện phù hợp. (Tham số thứ hai là không bắt buộc. Ở đây bạn có thể cung cấp một tên lớp nếu đối tượng của bạn cho thấy nhiều hơn một.)

Set myObject = GetObject("C:\some\path\helloworld.dll", "appname.HelloWorld") 
myObject.Print 
+1

Cảm ơn! Điều đó sẽ làm việc tuyệt vời. – steventnorris

+3

Tôi chỉ sử dụng regasm và sau đó là 'CreateObject'. Tôi không bao giờ có thể làm công việc 'GetObject'. Tui bỏ lỡ điều gì vậy? Cảm ơn! – bluish

+2

Khi tôi nhập hai tham số: Tôi gặp lỗi: _ ** Thành phần ActiveX không thể tạo đối tượng 'GetObject'. ** _ Khi tôi chỉ nhập tham số đầu tiên: Tôi đã nhận: _ ** Tên tệp hoặc tên lớp không được tìm thấy trong Tự động hóa. ** _ – HighTechProgramming15

0
+0

Ok vậy đó là cách đăng ký DLL với máy chủ/toàn bộ hệ thống, nhưng làm thế nào tôi trực tiếp khai báo/gọi một dll trong VBScript? Tôi đọc các liên kết dưới đây mà dường như để nói nó có thể, nhưng làm thế nào mà tuyên bố sẽ xem xét nếu nó được cho một phương pháp tĩnh của một lớp học? http://support.microsoft.com/kb/106553 – steventnorris

+0

cuộc hội thoại liên kết của bạn về hình ảnh cơ bản. không phải vbscript. và câu hỏi của bạn đã được trả lời: http://stackoverflow.com/a/769346/736170 –

+0

Liên kết đó không trả lời được câu hỏi của tôi. Và xin lỗi về sự kết hợp ngôn ngữ. Tôi cần điều này cho VBScript, nhưng tôi cho rằng sẽ có một quá trình tương tự. Tôi muốn gọi dll từ kịch bản của tôi mà không cần phải đăng ký với máy chủ. Nó sẽ được nạp động tại thời gian chạy từ đường dẫn tệp. – steventnorris

1

Tôi nghĩ rằng bạn có thể tìm kiếm Registration-Free COM. Câu trả lời SO này liên quan đến Microsoft.Windows.ActCtx sẽ giúp cụ thể cho VBScript.

Hãy nhớ rằng COM không hỗ trợ các phương thức tĩnh, vì vậy bạn sẽ phải đặt phương thức Print của mình thành một phương thức thể hiện.