gpt4 book ai didi

c# - 尝试为 SxS C#.NET COM DLL 调用 CoCreateInstance 时出现 HRESULT 0x80070002 (FILE_NOT_FOUND)

转载 作者:太空宇宙 更新时间:2023-11-03 14:01:58 24 4
gpt4 key购买 nike

我正在尝试从 native COM 客户端中的 C#.NET DLL 创建 COM 对象。这是 C#.NET 代码

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);
}
}
}

如果我告诉 Visual Studio 为 COM 互操作注册它并调用 CoCreateInstance 它会按预期工作。

现在我想使用相同的 DLL 作为免费注册并排 COM。我将依赖项添加到我的应用程序 list 中

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

并创建文件 NetTestCom.X.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="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>

现在,当我尝试调用 CoCreateInstance 时,我得到 HRESULT 0x80070002。应用程序、DLL 和 list 都在同一个目录中。

最佳答案

看来 list 中有问题。我将这个依赖声明用于应用程序 list

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

并且此 list 为 NetTestCom.manifest(使用 GenMan32.exe 生成)

<?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>

现在它按预期工作了。

关于c# - 尝试为 SxS C#.NET COM DLL 调用 CoCreateInstance 时出现 HRESULT 0x80070002 (FILE_NOT_FOUND),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10530195/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com