プラグインモジュールに大きく影響されているC++プログラムを書くつもりです。最初は、APiを他の人が拡張する抽象クラスとして利用できるようにすることだけを考えていました。誰かと話をした後、言語にとらわれない方法でそれを利用できるようにすることを考えるべきだと述べました。
どの言語でもAPIを効果的に公開するにはどうすればよいですか?
私が思いつく可能性のある解決策は、C++直接およびCLI言語(C#、Fなど)用に、当初意図したようなC++ APIを用意し、その後、一種のドキュメントと実行可能な組み合わせを用意することでした。予想される入力がドキュメントに記述されている場合、実行可能ファイルが(コンソール/ターミナルを介して)起動されます。起動コマンドとしてパラメーターを指定します。これは理論的には機能しますが、私にとっても標準的なソリューションのようには聞こえません。 これは他のデスクトップソフトウェアでどのように行われますか?
受け入れられた答えは多かれ少なかれ正しいですが、言語の独立が実際にあなたにとって燃えている問題であるならば、どこへ行くにもあなたを提供しません。 C++は他の言語(C#、Pythonなど)からかなり呼び出すことができます。質問の口調から見ると、「持っているといい」のように聞こえますが、それ以外の場合は少しの間、ふりをしてみましょう。
プラットフォーム/言語に依存しない通信が重要な場合は、 サービス指向アーキテクチャ を使用する必要があります。 C++コードを独自の自己完結型サービスとして提供する必要があります。これは、テクノロジーにとらわれないネットワークプロトコルを介して要求に応答できます。
これはサーバーアプリケーションの世界ではかなり一般的であり、アーキテクチャ、スケーラビリティ、および他の人のコードの厄介なメモリバグ(+スタックオーバーフローなど)からアプリケーションを保護することで多くの利点があります。
ただし、デスクトップアプリの場合は少し変わっています。私はそれを The Rider IDE で見ました。彼らは主に、ReSharper製品をIDE製品から分離しておくことのアーキテクチャ上の利点のためにそれを使用します。
これは、最終的には物事にとらわれない方法ですが、複数の領域で多くの利点と欠点を持つ重大なアーキテクチャの変更も表しています。それを調べて決定してください。
文字通り100%普遍的なものはありませんが、かなりさまざまな言語からAPIを簡単に使用できるようにする方法はいくつかあります(とにかく、ほとんどの人が通常気にしている以上のものです)。
最も明白な(そしてユビキタスな)フォームはRPCです-- gRPC または Thrift (または、Windowsを使用している場合は [〜#〜]) com [〜#〜] )。
これらはすべてほぼ同じように機能します。API自体をインターフェイス定義言語(IDL)で定義します。次に、コンパイラーを使用して、このインターフェースのクライアント側またはサーバー側、あるいはその両方のコードを生成します。これは通常、サーバーのスケルトンを提供します。あなたは実際の機能を満たし、それをすべてコンパイルして、あなたは外に出ます。
原則として他の回答にも同意しますが、OPは少なくともいくつかの開始点を期待しています。これは、OPが回答をさらに検索するのに役立ちます。
インプロセス
重要な考慮事項
Win32 DLL
プロセス外、同じマシン、非通信(実行中の情報交換なし)
アウトプロセス、同じマシン、通信
アウトプロセス、異なるマシン、通信
「昔ながら」の、しかしかなり成熟した技術を議論に取り入れるために:
CORBAを使用すると、言語に依存しない方法でオブジェクト指向APIを定義できます(独自のIDL =インターフェイス定義言語を定義します)。言語マッピングは、実際にすべての主要言語(および多くのエキゾチックな言語)でも使用できます。
ローカルおよびリモートのプロセス間通信をサポートします(これは一般的な使用例です)が、サーバーの実装をインプロセスで実行することもできます(その後、直接メソッド呼び出しを使用します)。プロセス間通信プロトコルはバイナリベースであり、非常に高速です。
私たちの会社では、パフォーマンスが重要な場合に引き続き使用しており、相互運用性は常に機能しています(Java、C、C++、C#、CommonLispの組み合わせを使用)。パートナー企業とのインターフェースにはCORBAを使用しており、多くの場合、使用しているプログラミング言語すらわかりません。
そして、おそらくあなたは知らずにそれをすでに使用したことがあります。例えば。 JavaのRMI/IIOPは事実上CORBAです。