VB6コードから使用する.NETコードがいくつかあります。私は常に、依存する.NETアセンブリをリストしたVB6.exe.manifestファイルを作成することにより、XPマシンでこれを開発してきました。
たとえば、私の2つの.NETアセンブリがSome.Assembly.A.dllとSome.Assembly.B.dllであるとすると、VB6.EXE.manifestは次のようになります(以下のバージョン=1.1.0.0を使用します。これがバージョンです。 AssemblyInfo.csで.NETAssemblyVersionを設定しました):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
type = "win32"
name = "client"
version = "1.1.0.0" />
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Some.Assembly.A"
version="1.1.0.0" />
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Some.Assembly.B"
version="1.1.0.0" />
</dependentAssembly>
</dependency>
</assembly>
次に、同じディレクトリ内のDLLとともに、アセンブリと独自のマニフェストファイルがあります。「Some.Assembly.A.dll.manifest」の例を次に示します。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
type="win32"
name="Some.Assembly.A"
version="1.1.0.0" />
<clrClass
clsid="{F1234567-1234-1234-1234-123456789012}"
progid="Some.Assembly.A.Class1"
threadingModel="Both"
name="Some.Assembly.A.Class1" >
</clrClass>
<file name = "Some.Assembly.A.dll" />
</assembly>
また、参照されているDLLを実行tlbexp
してTLBファイルを作成します。これは、VB6プロジェクトファイルで参照しているものです。
Windows 764BITマシンに移行したい。同じ方法を使用して、WIN7マシンで.NETオブジェクトをインスタンス化するVB6コードをヒットすると、次のようになります。
ActiveXコンポーネントはオブジェクトを作成できません。」
XPでは成功します。VB6.EXE.manifestの依存アセンブリのスペルを意図的に間違えた場合-XPでは
「アプリケーションの構成が正しくないため、このアプリケーションを起動できませんでした。アプリケーションを再インストールすると、この問題が解決する場合があります。」
WIN7では、VB6がロードされるだけです。WIN7のマニフェストを無視するようなものなので、WIN7のREGFREEメソッドを使用して.NETオブジェクトをロードすることはできません。regasm
DLLの場合、すべてが機能します。
VB6をWIN7(64ビット)のreg free comで動作させる方法についてのアイデアはありますか?