C# 在c中加载com DLL#

C# 在c中加载com DLL#,c#,.net,dll,com,C#,.net,Dll,Com,我想在c#控制台应用程序中动态加载COMdll 到目前为止,我已经尝试了以下代码: // load exe with args as EXE DllName classNameTobeLoaded try { // load assembly Assembly Dll = Assembly.LoadFile(@"C:\My_Dir\TestComDll.dll"); // get the type names foreach(Type t in Dll.GetExportedTypes(

我想在c#控制台应用程序中动态加载
COM
dll

到目前为止,我已经尝试了以下代码:

// load exe with args as EXE DllName classNameTobeLoaded
try
{
 // load assembly
 Assembly Dll = Assembly.LoadFile(@"C:\My_Dir\TestComDll.dll");
 // get the type names
 foreach(Type t in Dll.GetExportedTypes())
 {
   dynamic vClassLoaded = Activator.CreateInstance(t,"Test");
   Console.WriteLine("Type Loaded");
 }

  Console.WriteLine("DLL is loaded");
}
catch (Exception ex)
{
  Console.WriteLine("Unable to load a DLL because \n" + ex.Message);
}
但在加载dll时,我得到的错误如下:

{System.BadImageFormatException: The module was expected to contain an assembly manifest. (Exception from HRESULT: 0x80131018)
   at System.Reflection.RuntimeAssembly.nLoadFile(String path, Evidence evidence)
   at System.Reflection.Assembly.LoadFile(String path)
   at ThirdPartyDLLLoader.Program.Main(String[] args) in h:\Test Exe\ThirdPartyDLLLoader\ThirdPartyDLLLoader\Program.cs:line 18}
同样的代码在
.NETDLL
上运行良好

有人能告诉我为什么代码不能动态加载COM dll吗

如果不是,你能告诉我怎么做吗


谢谢你的建议和帮助。

这是办不到的。
Assembly.LoadFrom
方法用于加载.NET程序集。COM库必须注册,然后您可以使用
Activator.CreateInstance
方法实例化类

以下是我访问MS Word的方式:

Type type = Type.GetTypeFromProgID("Word.Application");
object obj = Activator.CreateInstance(type);

我有一个加载类库dll的函数

 public ICollection<Assembly> GetAssemblies(string pathOfDLL)
    {
        List<Assembly> baseAssemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();
        var controllersAssembly = Assembly.LoadFrom(pathOfDLL);
        baseAssemblies.Add(controllersAssembly);
        return baseAssemblies;
    }
public ICollection getAssembly(字符串pathOfDLL)
{
List baseAssemblys=AppDomain.CurrentDomain.GetAssemblys().ToList();
var controllerassembly=Assembly.LoadFrom(pathOfDLL);
BaseSassemblies.Add(controllersAssembly);
返回基座组件;
}

希望有帮助

您必须使用.COM创建一个与.NET不同的包装器。加载前是否注册了TestComDll.dll?@Dennis是的,我以前注册过dllloading@Filburt我也有一个tlb,但没有使用Tlbimp.exe创建任何CLR程序集