2012-05-10 15 views
2

ネイティブCOMクライアントのC#.NET DLLからCOMオブジェクトを作成しようとしています。私は、COM相互運用のためにそれを登録し、期待どおりに動作するのCoCreateInstanceを呼び出すためのVisual Studioを伝える場合、これはC#.NETコードSESA C#.NET COM DLLのCoCreateInstanceを呼び出そうとすると、HRESULT 0x80070002(FILE_NOT_FOUND)が返される

using System; 
using System.Reflection; 
using System.Runtime.InteropServices; 

[assembly: AssemblyVersion("1.0.0.0")] 
[assembly: Guid("3B6B6C37-A5BC-45DF-878E-E9D5C8B009D8")] 

namespace NetTestCom 
{ 
    [ComImport] 
    [Guid("508012FC-26A9-4985-A985-3EBB03D8D3A6"), 
     ComVisible(true)] 
    public interface ITestClass 
    { 
     int StrToInt(String S); 
    } 

    [Guid("A3D56E20-0792-42D9-B2DD-BB8A8AD75394"), 
     ComVisible(true)] 
    public class TestClass : ITestClass 
    { 
     public int StrToInt(String S) 
     { 
      return Convert.ToInt32(S); 
     } 
    } 
} 

です。

ここでは、登録不要のSide-by-Side COMと同じDLLを使用したいと考えています。私はCoCreateInstanceを呼び出すをしようとすると、今私はHRESULTを0x80070002がを取得

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity 
    type="win32" 
    name="NetTestCom.X" 
    version="1.0.0.0" /> 

    <clrClass 
    clsid="{A3D56E20-0792-42D9-B2DD-BB8A8AD75394}" 
    progid="NetTestCom.TestClass" 
    threadingModel="Both" 
    name="NetTestCom.TestClass" 
    runtimeVersion="v2.0.50727" > 
    </clrClass> 

    <file name="NetTestCom.dll"></file> 
</assembly> 

NetTestCom.X.manifest

<dependency> 
    <dependentAssembly> 
    <assemblyIdentity 
     type="win32" 
     name="NetTestCom.X" 
     version="1.0.0.0" /> 
    </dependentAssembly> 
</dependency> 

マニフェスト自分のアプリケーションに依存関係を追加し、ファイルを作成します。アプリケーション、DLL、マニフェストはすべて同じディレクトリにあります。

+0

プロセスモニタを使用して、.dll検索がどのように行われているかを確認できます。 – sharptooth

答えて

1

マニフェストに問題があるようです。私は予想通り今では動作します(GenMan32.exeで生成)NetTestCom.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
    <assemblyIdentity 
     name="NetTestCom" 
     version="1.0.0.0" 
     processorArchitecture="MSIL" /> 
    <clrClass 
     clsid="{A3D56E20-0792-42D9-B2DD-BB8A8AD75394}" 
     progid="NetTestCom.TestClass" 
     threadingModel="Both" 
     name="NetTestCom.TestClass" 
     runtimeVersion="v2.0.50727"> 
    </clrClass> 
    <file name="NetTestCom.dll"> 
    </file> 
</assembly> 

として

<dependency> 
    <dependentAssembly> 
    <assemblyIdentity 
     name="NetTestCom" 
     version="1.0.0.0" 
     processorArchitecture="MSIL" /> 
    </dependentAssembly> 
</dependency> 

と、このマニフェストアプリケーションマニフェストについては、この依存関係の宣言を使用していました。

関連する問題