Я следовал шаги, описанные в этом вопросе:Невозможно загрузить .NET DLL из рубина
И так, у меня есть это в 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);
}
}
}
}
Под раствором name: RubyToCSharp
Я проверил Register for COM interop
на VS и создал следующий рубиновый код:
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>'
Любые мысли о том, что я пропавших без вести здесь?
EDIT
После проверки, если мой длл был регистр в соответствии с this SO question, кажется, что на самом деле моя длл зарегистрирован, но до сих пор, то же самое происходит ошибка.
Действительно запутался здесь ...
Спасибо за ответ joe, Пара вещей: 1) [сборка: ComVisible (false)] может быть в файле AssemblyInfo.cs и сделает все классы com видимыми (у меня это настроено) в моем проекте. 2) Мне нужно понять, если он зарегистрирован через VS15, означает ли это, что эта DLL доступна через всю ОС? или он «жив» только в VS15-гире? – Itzik984
Записи в реестре, необходимые для COM, будут отображаться на всей ОС, предполагая, что вы запускаете VS как повышенный администратор. Быстрый трюк, чтобы проверить, если он работает, чтобы написать VBS скрипт: 'Dim obj' ' установить OBJ = CreateObject ("ComLIb.LogWriter") '' MsgBox TypeName (объект) ' Возникают проблемы ... Выполнить это с помощью C: \ Windows \ system32 \ wScript.exe и запустить его с помощью C: \ Windows \ SysWOW64 \ wscript.exe по умолчанию он должен добиться успеха с одним в каталоге SysWow64 , Это скажет вам, правильно ли зарегистрирована. –
Хорошо, еще раз спасибо ... Все еще не знаю, что здесь происходит. похоже, что я все делаю, как должен. – Itzik984