dll的我已執行了這個問題中描述的步驟:無法加載.NET從紅寶石
所以,我有此C#代碼:
using System;
using System.IO;
namespace ComLib
{
public class LogWriter
{
public void WriteLine(string line)
{
using (var log = new StreamWriter(File.OpenWrite(@"c:\log.file")))
{
log.WriteLine(line);
}
}
}
}
在溶液命名爲:RubyToCSharp
我在VS中檢查了Register for COM interop
並創建了以下ruby代碼:
require "win32ole"
lib = WIN32OLE.new('RubyToCSharp.ComLib.LogWriter')
lib.WriteLine('calling .net from ruby via COM, hooray!')
,現在我試圖逃避PowerShell中林心如和我不斷收到此錯誤:
./exmpl.rb:4:in `initialize': unknown OLE server: `RubyToCSharp.ComLib.LogWriter' (WIN32OLERuntimeError)
HRESULT error code:0x800401f3
Invalid class string
from ./exmpl.rb:4:in `new'
from ./exmpl.rb:4:in `<main>'
上什麼,我在這裏錯過了有什麼想法?
編輯
檢查之後,如果我的DLL是根據this SO question, 寄存器看來,的確是我的DLL被註冊了,不過,同樣的錯誤發生。
在這裏真的很困惑......
感謝您的答案joe,幾件事情: 1)[assembly:ComVisible(false)]可能在AssemblyInfo.cs文件中,並且會使我的項目中的所有類com都可見(我已配置此設置)。 2)我需要了解,如果它是通過VS15註冊的,這是否意味着這個DLL可以通過整個操作系統?還是隻在VS15目錄中「活着」? – Itzik984
COM中必需的註冊表項將在整個操作系統中假設您將VS作爲高級管理員運行。 快速伎倆,以測試它是否工作就是寫一個VBS腳本: '昏暗obj' '設置OBJ =的CreateObject( 「ComLIb.LogWriter」)' 'MSGBOX類型名(OBJ)' 遇到問題... 通過C運行:\ WINDOWS \ SYSTEM32 \ WScript.exe的 並運行它通過C:\ WINDOWS \ SYSWOW64 \ WScript.exe的 默認情況下,它應該與一個在SYSWOW64目錄成功。這會告訴你它是否正確註冊。 –
好的,再次感謝......仍然不知道這裏發生了什麼問題。好像我在做我應該做的一切。 – Itzik984