私はUbuntu OS上で実行されている
- .Net Core Applicationの2つのコンポーネントを持っています。
- C++共有ライブラリ(.soが)C++の(C#).NET Coreメソッド
今、私はC++コンポーネントがネットコアメソッドを呼び出すことができるようにしたい、いずれかのC++コンポーネントへのインタフェースを渡すと、パラメータとしてメソッドの実装や受け渡し方法をコールバックするために、このインターフェイスを使用します。これ〜C++コンポーネント。
私が達成しようとしています何高レベルの例は:
C#のコンポーネント:
public interface IDevice
{
void OnDataAvailable(string data);
}
public class Device: IDevice
{
[DllImport("sampleCPPLibrary.so")]
private static extern int SetReceiver(IDevice receiver);
public void OnDataAvailable(string data)
{
Console.WriteLine(data);
}
public void Initialize()
{
SetReceiver(IDevice(this))
}
}
C++コンポーネント:
extern "C" {
void SetReceiver(IReceiver * receiver)
{
receiver->OnDataAvailable(10);
}
}
は基本的に、私は何をしようとしていることがちょうど渡すことですC++コンポーネントへの何らかの "コールバック"を呼び出し、C++コンポーネントで何らかのイベントが発生したときにこの "コールバック"を呼び出します。
私はあなたがインターフェイスでそれを行うことはできないと思っています(インターフェイスはそれを実装するオブジェクトを持っているためです)。私は.Net Coreにあまり慣れていませんが、['Marshal.GetDelegateForFunctionPointer'](https://docs.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.marshal.getdelegateforfunctionpointer?view = netframework-4.7.1#System_Runtime_InteropServices_Marshal_GetDelegateForFunctionPointer_System_IntPtr_System_Type_)を利用できます。これを使用してCスタイルのコールバックを呼び出すことができます。 –