2009-10-15 20 views
6

.NET 3.5のWinFormsアプリケーションで参照されている.NET 3.5アセンブリライブラリで参照される登録無料のVB6 DLLがあります(関連性がない、絵を描くために含まれています)。Reg Free COMリファレンス - 欠損値 '(デフォルト)'

私は「COMの参照を分離する問題 『のエラーを取得していますSomeVBDll』:Registry key 'HKEY_CURRENT_USER\SOFTWARE\CLASSES\CLSID\{dd1d7f58-1d6b-4370-a1b9-05c03816a128}\InProcServer32' is missing value '(Default)'

私の最初の試みは、この値が実際に存在し、その後、所定の位置に置くかどうかを確認することでした。これによりコンパイル時に上記のメッセージが表示されました。

誰でもこの問題が発生しましたか、それに対する解決策がありますか?

ありがとうございます。以下は、VB6 dllを直接参照するアセンブリのマニフェストです。多目的で問題が解決しているようだとして、VB6 DLL内のすべてのクラスをマーキング

<assembly xsi:schemaLocation="urn:schemas-microsoft-com:asm.v1 assembly.adaptive.xsd" manifestVersion="1.0" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:co.v1="urn:schemas-microsoft-com:clickonce.v1" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <assemblyIdentity name="Native.App.Core" version="1.0.0.0" type="win32" /> 
    <file name="SomeVBDll.dll" asmv2:size="184320"> 
    <hash xmlns="urn:schemas-microsoft-com:asm.v2"> 
     <dsig:Transforms> 
     <dsig:Transform Algorithm="urn:schemas-microsoft-com:HashTransforms.Identity" /> 
     </dsig:Transforms> 
     <dsig:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> 
     <dsig:DigestValue>BWWHQTqNGUupT8xznLoN3jn7S9Y=</dsig:DigestValue> 
    </hash> 
    <typelib tlbid="{755c1df5-d0c5-4e10-a93d-54bf186e8daf}" version="1.0" helpdir="" resourceid="0" flags="HASDISKIMAGE" /> 
    <comClass clsid="{dd1d7f58-1d6b-4370-a1b9-05c03816a128}" threadingModel="Apartment" tlbid="{755c1df5-d0c5-4e10-a93d-54bf186e8daf}" progid="SomeVBDll.MyClass" /> 
    </file> 
</assembly> 

EDIT ///

これは私が経験していた問題を回避しながらも、私はregフリーのCOMを使用することができますが、誰もCOMクラスのインスタンスをMultiUseに設定する必要はありませんか?

+0

このスレッド[http://www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.framework.interop /2006-01/msg00097.html]は、プライベートとしてマーキングされたインスタンスを持つVB6 DLL内にいくつかのクラスが存在するという事実に関連している可能性があることを示しています。これは私の場合もそうです。私はMultiUse(非プライベート)クラスを1つ持ち、残りはプライベートです。私はむしろMultiUseとして他人をマークしないだろうが、実際には問題の周りに動作するかどうかを確認するためにそうするだろう.... –

+0

Ok、MultiUseの事は一時的な修正と思われるので、実際の根本的な問題ではなかった。私は今、私の元の記事で述べたのと同じ問題を抱えています。 私はWindows Vista Ultimate x64上の非管理者として、Visual Studio 2008のプロジェクトを非管理者としてビルドしています。 –

+0

COM DLLに定義されているすべての単一のクラスについて上記のエラーが報告されているようです。各クラスがMultiUseとしてマークされていることを確認しました。 –

答えて

0

私が見た唯一の解決策(MultiUseとしてすべてのクラスをマークする可能性のあるセキュリティ/保守の問題を回避する場合)は、 ".../InProcServer32"レジストリキーを削除することですが、標準で "レジストリを慎重に扱う"という警告が表示されます。

+0

偶数ビルドプロセスの一環として/ InProcServer32キーを削除しても問題は解決しません。私はその仕事をすることができれば大丈夫だろうが、それらのキーを削除しても、まだエラーが出る。 –

0

プライベートVB6としてマークされているCOMクラスは、Inproc32の値を登録せず、Visual Studioで生成されたアセンブリマニフェストは不完全です。私のマニフェストを作成するようないくつかのツールがあります。http://mmm4vb6.atom5.com/は、コンポーネントのマニフェストの作成に役立ちます。

+0

私はVB6 dll MultiUseのすべてのタイプにマークを付けましたが、まだマニフェストの問題があると思いますか?私はこれが役立つかどうかを見る時間があるときにMMMを見ていきます。投稿していただきありがとうございます。 –

関連する問題