アフィリエイト広告を利用しています

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

2022年07月19日

いまさらのCOM

COM は Component Object Model の略

ローカルでCOM登録をするためにVisualStudioは管理者で起動する
ビルドにてCOM相互運用機能の登録にチェックをつける。
アプリケーションのアセンブリ情報で、「アセンブリをCOM参照可能にする」

System.Runtime.InteropServices
公開するインターフェイスの属性に「ComVisible(true)」と記述する

[ComVisible(true)]
internal interface IComLogger
{
void WriteLog(string log);
}


作成したインターフェイスを実装したクラスを作成する
クラスの属性に「 [ClassInterface(ClassInterfaceType.None)]」を定義する


[ClassInterface(ClassInterfaceType.None)]
public class ComLogger : IComLogger
{
public ComLogger()
{
}

public void WriteLog(string log)
{
}
}


上記の記述ができたら、VBScriptから以下のように実行すれば動作する

Dim logger
Set logger = CreateObject("ClassLibrary.ComLogger") 'namespaseからなのを忘れずに
logger.WriteLog("ログ")



NLOGでログ出力するサンプル
◇インターフェイス
using System.Runtime.InteropServices;

namespace ClassLibrary
{
[ComVisible(true)]
internal interface IComLogger
{
void WriteLog(string log);
}
}


◇実装クラス

using NLog;
using NLog.Config;
using NLog.Targets;
using NLog.Targets.Wrappers;
using System.Runtime.InteropServices;
using System.Text;

namespace ClassLibrary
{
[ClassInterface(ClassInterfaceType.None)]
public class ComLogger : IComLogger
{
static readonly Logger _logger = LogManager.GetCurrentClassLogger();

public ComLogger()
{
var file = new FileTarget("LogFile");
file.Encoding = Encoding.GetEncoding("Shift_JIS");
file.Layout = "${longdate} [${threadid}] [${uppercase:${level}}] ${callsite}() - ${message}";
file.FileName = "${basedir}/logs/${date:format=yyyyMMdd}_debug.log";
file.KeepFileOpen = false; //これをtrueにしているとレスポンスが良いがログが飛んでしまう
file.ArchiveNumbering = ArchiveNumberingMode.Date;
file.ArchiveFileName = "${basedir}/logs/debug.log.{#}";
file.MaxArchiveFiles = 30;

var asyncWrapper = new AsyncTargetWrapper();
asyncWrapper.QueueLimit = 5000;
asyncWrapper.OverflowAction = AsyncTargetWrapperOverflowAction.Grow;
asyncWrapper.WrappedTarget = file;

var conf = new LoggingConfiguration();
conf.LoggingRules.Add(new LoggingRule("*", LogLevel.Debug, file));
conf.AddTarget("LogFile", asyncWrapper);

LogManager.Configuration = conf;
}

public void WriteLog(string log)
{
_logger.Info(log);
}
}
}

posted by tecksaver at 21:23| Comment(0) | TrackBack(0) | Microsoft
ファン
検索
<< 2022年07月 >>
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            
最新記事
写真ギャラリー
最新コメント
タグクラウド
カテゴリーアーカイブ
月別アーカイブ
プロフィール
じゃわらーさんの画像
じゃわらー
プロフィール
日別アーカイブ
×

この広告は30日以上新しい記事の更新がないブログに表示されております。