から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
を確認し、次のルビーコードを作成しました:
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
私のdllがthis SO questionによるレジスタ、 だったかどうかをチェックした後に確かに私のDLLが登録されているようですが、それでも、同じエラーが発生します。こちらに本当に混乱し
...のComVisibleをマークされている
私は、プロジェクトのところで、AssemblyInfo.csファイルに[assembly:ComVisible(false)]があり、すべてのクラスを表示するように設定しています。 2)VS15を介して登録されている場合、これはこのDLLがOS全体を通して利用可能であることを意味するのでしょうか?それともVS15 DIRだけで「生きている」のですか? – Itzik984
昇格された管理者としてVSを実行していると仮定すると、COMに必要なレジストリ内のエントリは、OS全体になります。 それが働いているかどうかをテストするための迅速なトリックは、VBSスクリプトを書くことです: 'obj'暗く '設定OBJ =のCreateObject( "ComLIb.LogWriter") ' ' MsgBoxに型名(OBJ) ' トラブルを有するCを経由して... 実行して:\ WINDOWS \ SYSTEM32 \ wscript.exeとし、Cを経由して、それを実行します。デフォルトでは wscript.exeと\ WINDOWS \ SYSWOW64 \それはSYSWOW64ディレクトリ内のいずれかで成功する必要があります。これは、それが正しく登録されているかどうかを伝えます。 –
もう一度感謝します...ここで間違っていることはまだ分かりません。私のようにすべてをやっているようです。 – Itzik984