2008-12-05 60 views

回答

5

通過指定/codebase參數,您可以註冊該.NET dll與regasm utility。不鼓勵該參數與未簽名的程序集一起使用,但當您不能將程序集放入GAC時,該參數可用。

regasm your.dll /codebase 

請注意,在此操作之後,您不應該更改.dll的路徑,因爲它會將此路徑插入到Windows註冊表中。

+0

你怎麼註銷,一旦你做到了嗎? – 2008-12-05 21:47:31

+1

regasm your.dll/unregister – huseyint 2008-12-05 22:16:54

1

不是直接。你需要一個COM Callable Wrapper來從COM調用任何.NET庫(因此VBScript)。因此,您應該直接創建一個CCW到DLL,或者您可以爲代理DLL創建一個CCW,它提供加​​載.NET DLL的通用方法,併爲您提供調用組件上的實際方法並返回結果的方法。它真的不乾淨。所以,一般來說,答案是否定的。

6

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

我已經包含在DLL中的IsAlive方法...

Public Function IsAlive() As Boolean 
    Return True 
End Function 

...並且可以檢查其註冊的使用語法正確:

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

希望這可以幫助別人......

12

我只是有這個做我自己,我的研究結果是:

使類型對COM可見:

  1. 確保你的類是公共的,非靜態的和具有公共默認構造函數即沒有參數。
  2. 確保您的方法是公開的,非靜態的。
  3. 確保您在裝配體上有以下設置 - 通常在AssemblyInfo中。CS

    [assembly: ComVisible(true)] 
    
  4. 建立你的DLL,從SDK命令行運行後:

    regasm yourdll.dll 
    

    這應該回應:成功註冊

    類型

    如果你得到

    RegAsm:警告RA0000:無類型登記

    ,那麼你需要設置ComVisible或不公開的,非靜態類型。

從PowerShell中

$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 
4

萬一有人需要調試/步到.NET的DLL這是一個從只有VBScript中稱爲:

  1. 在.net dll項目調試設置屏幕上,通過瀏覽到wscript.exe程序(位於C:\ WINDOWS \ system32 \ wscript.exe)中設置「啓動外部程序」。

  2. 在「命令行參數」上,設置VBScript文件(C:\ Test \ myTest.vbs)的文件名和路徑位置。確保vbs文件和dll文件位於相同的位置。

  3. 最後,在.NET項目DLL源代碼,只需設置斷點並點擊「開始調試」