2010-05-26 57 views
4

爲了簡短起見,我已經構建了一個C#類庫,它既是COM-Visible又是COM Interop的註冊表。我編譯了這個庫,導致生成了.dll和.tlb文件。用於VB6應用程序的類庫的RegAsm

我有另一臺運行VB6應用程序的機器。因此,我將.dll和.tlb文件複製到機器上的C:/ Windows/system32文件夾中。然後,我用註冊這些文件如下:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm C:\Windows\system32\TestClass.dll /tlb:TestClass.tlb 

文件已成功註冊後,我添加了一個項目引用從我的VB6應用程序內Test.tlb文件,然後我想在我的新的調用方法引用類如下:

Dim myObject As TestNamespace.TestClass 
Set myObject = New TestNamespace.TestClass 
MsgBox (myObject.TestMethod()) 

它不起作用,我收到一個-2147024894自動化錯誤。

我讀過,我不應該將dll安裝到像system32這樣的私人文件夾中。我應該無論是在GAC被註冊或者我應該在其他位置使用「/代碼庫」選項登錄:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm C:\TestClass.dll /tlb:TestClass.tlb /codebase 

有沒有我不應該使用SYSTEM32任何理由?曾經在這個項目上工作過的開發人員已經將這個VB6項目使用的彙編文件放到了system32中,但似乎沒有任何問題。

當我在system32位置註冊我的dll時,出現自動化錯誤。當我在另一個位置(即C:/)註冊我的dll時,從VB6調用我的類庫的方法按預期工作。是什麼賦予了?

我應該提到,我們不會使用GAC來註冊任何DLL。就是那樣子。

任何幫助表示讚賞。

邁克

+1

你嘗試/ codebase選項時註冊在system32文件夾中的DLL? – 2010-05-26 18:34:06

回答

1

我還沒有使用regasm在SYSTEM32一個dll的任何問題。我總是使用/ Codebase開關,它將tlb的位置放在註冊表中,所以VB6不會混淆。

有關更多信息,請參閱MSDN page

+0

只是想補充一點,我剛剛遇到了一個類似的情況,那就是使用「/ codebase」參數重新調用了一個DLL。 DLL的入口點已經改變了,所以我還必須使用「/ tlb」參數來正確地重新註冊。 – jerhewet 2012-10-31 00:00:10