Я хочу динамически загружать dll COM
в консольное приложение C#.Загрузить com DLL в C#
До сих пор я попытался следующий код:
// 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}
тот же код работает отлично для .NET DLL
.
Может ли кто-нибудь сказать мне, почему код не может динамически загружать dll COM?
, и если нет, можете ли вы рассказать мне, как я могу сделать то же самое.
Спасибо за любое предложение и помощь.
Вам понадобится создать оболочку с помощью [Tlbimp.exe] (https://msdn.microsoft.com/en-us/library/tt0cf3sx%28v=vs.110%29.aspx). – Filburt
COM работает по-другому, чем .NET. Загружается ли TestComDll.dll перед загрузкой? – Dennis
@ Dennis Да, я зарегистрировал dll перед загрузкой –