免费注册的COM,无需将dll复制到与可执行文件相同的目录中

|| 如何在不将dll复制到与可执行文件相同的目录的情况下使用免注册的COM对象?这可能吗? 我想要一个完整的工作样本或详细的分步指南以适应我的实际情况。 例如,我具有以下组件: CppTestRunner.exe-vc ++控制台应用程序 CppTests.dll-vc ++ mfc dll CsCOMServer.dll-C#COM可见dll 我不想修改exe或其目录,例如添加外部清单。 CppTests.dll与exe位于不同的目录。 如果CsCOMServer.dll与CppTests.dll位于同一目录中,则可以。 CppTestRunner.exe会在CppTests.dll上调用LoadLibrary,但效果很好。 嵌入清单并使用Windows激活上下文api之后,我能够将CsCOMServer.dll复制到exe目录以验证CppTests.dll可以创建CsCOMServer.dll实例,而不会出现问题,但是再次,我试图避免此步骤。 当前,将CsCOMServer.dll与CppTests.dll放在同一目录中,而在exe目录中没有CsCOMServer.dll的情况下,调用CoCreateInstance时出现以下错误: 错误= 0x80070002系统找不到指定的文件。 我已经使用sysinternals进程监视器来跟踪CppTestRunner.exe查找的路径,等等。 我注意到,根据我尝试做的事情,有时CppTestRunner.exe尝试读取与CppTests.dll相同的目录中的CsCOMServer.dll.config,但是无论我尝试放在哪里,我都无法获取过去的错误。 另外,根据我尝试执行的其他操作,CppTestRunner.exe尝试读取与CppTests.dll在同一目录中的CsCOMServer.dll,但是由于某些原因,我仍然遇到相同的错误。 有人知道在这种确切情况下可以工作的代码吗? 您可能会说,这是某些单元\\集成测试的一部分。 作为一个简单的解决方法,我当前将CppTestRunner.exe复制到CppTests.dll所在的目录并从那里运行它,但想避免此步骤。 谢谢。     
已邀请:
        .NET首先在GAC中查找托管的免注册COM,然后在可执行文件的文件夹中查找。它使用激活上下文读取激活元数据,但不确定文件本身的位置。     
        您可以将DLL保存在子文件夹中,例如DLLFolder \\ YourDll.dll,然后在yourDll的清单文件中,将文件名写为
<file name = \"DLLFolder\\YourDll.dll\">
但是您需要将清单文件(DLL的)保留在EXE的保存位置。     

要回复问题请先登录注册