【发布时间】:2014-09-06 00:57:21
【问题描述】:
我目前正在使用 C#/.NET 库,该库使用 C++ 的 COM 接口。就像一个简单的虚构示例来说明我目前正在做的事情:
我有一个声明和导出 COM 接口的 C#/.NET 组件。
[Guid("example-0000-0000-0000-0000000000000")]
public class MyObj : IMyObj
{
void DoSomething(string someArgument);
}
现在我导出一个类型库,该类型库导入到我的 C++ 应用程序中:
#import "MyObj.tlb" named_guids auto_rename
void someFunc()
{
MyObjPtr myObj;
myObj.CreateInstance(CLSID_MyObj);
myObj->DoSomething(_bstr_t(L"foo"));
// ...
}
实际上,C#/.NET 组件具有许多接口和方法。它以多线程方式从 C++ 中使用。
一切都很好,但我想为 C#/.NET 库启用日志记录。 C#/.NET 库的内部应该能够将日志消息发送回 C++ 应用程序,以便使用那里已经存在的日志记录环境来写入日志消息。
[C++ 日志系统]为这种情况创建一种回调的最佳方法是什么?
回调应该只接受一个简单的字符串。例如:
public interface ILogger {
void Write(string message);
}
如何在 C++ 端实现这一点?
(同时在这里回答:How to implement COM callback interface in C++, from C# assembly, using #import and tlb file?)
【问题讨论】:
标签: c# c++ .net visual-c++ com