1

C++ dll、lib、exe、およびさまざまな .h ファイルで作成された SDK を受け取りました。C++ 開発者向けだと思います。ドキュメントと共に提供されるサンプル プロジェクトはすべて C++ で記述されています。Visual Studio 8 (2005) で起動して実行できます。宣伝どおりにデバイスを制御します。ただし、これを使用する必要があるプロジェクトは C# .Net 2.0 であり、変更できません。

私の上司は C++ 開発者で、COM オブジェクトとしてコンパイルし、その COM オブジェクトを C# ソリューションにインポートするだけでよいと言っています。私の上司は、C++ コンパイルの知識がない私でも、SDK を COM オブジェクトとして「ラップ」するのに 1 時間もかからないはずだと言っています。

以前に C# ソリューションで COM オブジェクトを使用したことがあるので、これが作成されると、そこから問題なく続行できます。

しかし、2 つの .dll ファイル、1 つの .exe、1 つの .lib ファイル、1 つの .xml ファイル、および 12 の .h ファイルから COM オブジェクトを作成するにはどうすればよいかわかりません。これを実現するために何をすべきかを教えてくれるリソースはありますか?

4

7 に答える 7

3

私の上司は C++ 開発者で、COM オブジェクトとしてコンパイルし、その COM オブジェクトを C# ソリューションにインポートするだけでよいと言っています。

それは本当ですが、それを COM オブジェクトとしてコンパイルすることは、COM API をまだ実装していない限り (つまり、それを行うことができないということです)、"難しい" ことです (そうでない場合は、COM API を実装する前に実装する必要があります)。 COM オブジェクトとしてビルドできます)。

C++ を使用して COM オブジェクトを作成する方法を説明する本 (たとえば、Essential COM ) がありますが、それは自明ではありません (COM オブジェクトの構築については、Essential COMよりも優れた本や、C++ よりも優れた/簡単なツールがあるかもしれません)。

あなたやあなたの上司には、次の 3 つの選択肢があると思います。

  1. ベンダーに依頼して、COM オブジェクトとして提供してもらいます
  2. SDK の API をラップする COM API を設計します。この API をエクスポートする COM プロジェクトを (選択した言語で) 作成します。基礎となる SDK メソッドを呼び出して、これらの API を実装します。これを行うには、C++ を知っている人、またはこのプロジェクトに "1 時間" よりもはるかに長い時間を費やす意思がある人が必要になる場合があります。
  3. COM の使用は忘れてください。代わりに、SDK を DLL としてビルドし、PInvoke を使用して .NET コードから呼び出します。

私の上司は、C++ コンパイルの知識がない私でも、SDK を COM オブジェクトとして「ラップ」するのに 1 時間もかからないはずだと言っています。

あなたが言ったことに基づいて、私はそれを実現する方法を知りません。

于 2009-01-06T16:44:08.400 に答える
1

上司に、それをまとめるのに 1 時間もかからないかどうかを伝えてください。彼は必ずそうすべきです。そうすれば、あなたとあなたの両方の時間をより効率的に使うことができます。

ATL (属性を使用しない) もお勧めしますが、これは経験がないと正しく理解するのに時間がかかる可能性があります。

于 2009-01-06T18:43:16.710 に答える
0

私 (実際には私のリードと私) は、最初に会社が提供した SDK の dll に対して (System.Runtime.InteropServices の DllImport 機能を介して) p/Invoke を使用してみます。その様子をお伝えします。

于 2009-01-06T20:33:51.870 に答える
0

私の上司は、C++ コンパイルの知識がない私でも、SDK を COM オブジェクトとして「ラップ」するのに 1 時間もかからないはずだと言っています。

これは、経験豊富な C++/COM 開発者には当てはまりますが、初心者には当てはまりません。あなたの最善の策はATLを使用することだと思います。MSDN チュートリアルをご覧ください。

また、属性を使用しないでください。

于 2009-01-06T16:36:48.180 に答える
0

これはあなたの質問への完全な回答ではありませんが...

COM オブジェクトを作成する代わりに、P/Invoke を使用して DLL 内のメソッドを呼び出す方法があります。

MSDN フォーラムのこのスレッドでは、 P/Invoke を使用して呼び出す DLL を作成する方法について説明しています。

もちろん、クラス全体にアクセスする必要がある場合 (およびそのオブジェクトのインスタンスを作成する必要がある場合)、これは役に立ちません。

于 2009-01-06T16:41:44.317 に答える
-1

あなたが本当に欲しい/必要としているのは C++/CLI だと思います。そうすれば、マネージド アセンブリに直接ビルドすることができます。アイデアは、C# と C++ の一種のクロスのように見える非常に単純なラッパーを作成し、それが残りを実行するというものです。

于 2009-01-06T16:29:13.983 に答える