1

私はVB.netを初めて使用します。これらのオブジェクトは、以前に VB6 で作成したことがあります。私はVB.netで迷っていますが、(蹴ったり叫んだりして)これを行う方法を学ばなければなりません。私は何時間もグーグルで検索しており、わずかな前進しかありません。これを行う方法を最初から最後まで説明するリンクを誰でも投稿できますか?

クラスオブジェクトを作成できましたが、それを登録する方法と、CreateObject("Name1.Name2") の name1 と name2 がどこから来たのかわかりません。

Regsrv32 は機能しません。「エントリポイントが見つかりません」と表示され、登録されません。また、Assemblies ディレクトリにドロップできません。ある人が使用する regasm コマンドについて読んだことがありますが、これも機能しないようです。

ご協力いただきありがとうございます。

4

3 に答える 3

2

COM DLL を作成しようとしているのではなく、VB6 EXE が ActiveX DLL を呼び出すように、さまざまなサブアセンブリを呼び出す完全なプロジェクトを作成しようとしていると仮定します。あなたがやろうとしていることをより具体的にすることができれば、それは私をより良くするのに役立ちます.

VB.NET と VB6 に関するいくつかのポイント。

1) .NET のみのプロジェクトの場合、登録はありません。EXE または DLL が別の .NET DLL を参照する場合、唯一の要件は、DLL が親のディレクトリに存在することです。

2) .NET アセンブリを GAC に登録するだけで、.NET アプリの COM スタイル登録を行うことができます。ただし、これを行うにはいくつかの要件があります。.NET GAC で検索すると、これを行う方法に関するスクープが表示されます。

3) COM を使用するように .NET アセンブリをセットアップできます。この場合、regsvr への登録を含む COM の規則に従って動作します。

.NET のみのプロジェクトでは、#2 または #3 がまれにしか発生しないことがわかります。#1 は、DLL アセンブリの 90% に適用されます。これはプロジェクトに依存します。

CreateObject の一般的な用途は、プラグインまたはインストール可能なライブラリを許可することです。.NET は、Reflection API を通じてこれを処理します。リフレクション API を使用すると、ディレクトリを調べ、各 .NET DLL を調べて、それらが何であるかを確認し、見つけたものからオブジェクトを作成できます。これについては、.NET Reflection を検索して確認してください。

プロジェクトが .NET のみの場合は、作成するオブジェクトのインターフェイスを定義するマスター アセンブリと個々のサブ アセンブリの両方から参照されるアセンブリを作成することをお勧めします。これは、リフレクション API を使用してオブジェクト型を決定するときに、それをそのインターフェイスの変数に割り当て、インテリセンスやその他の補助機能を使用して通常どおりにコーディングできます。

古い COM ActiveX コントロールまたは DLL がある場合、.NET は ActiveX オブジェクトを .NET に公開するラッパー クラスを生成します。.NET でこれがどのように行われるかを学ぶのに少し時間を費やします。ダミー プロジェクトを作成し、必要な ActiveX を .NET に参照させます。次に、作成したラッパー プロジェクトと DLL を見つけて、中央の領域に移動します。そのため、同じ ActiveX を使用して後続のプロジェクトに取り組むとき、すべてのラッパーがどこにあるかを知っています。

于 2008-11-10T13:25:24.917 に答える
1

クラス ライブラリのプロパティに移動し、[COM 相互運用に登録] オプションを選択する必要があります。これにより、アセンブリが COM で使用できるようになります。

于 2008-11-09T17:23:36.963 に答える
-1

.NET コンポーネント用のCOM Callable Wrapper (別名 CCW)と呼ばれるものを作成したいと考えています。これには基本的に、いくつかの GUID を使用していくつかの COM インターフェイスを設定し、プロジェクトのプロパティで "Register for COM Interop" を有効にするか (前述のとおり)、regasm.exe を使用する必要があります。

于 2008-11-09T18:49:50.987 に答える