Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用tlbimp而不需要第二次组装?_C#_Com_Com Interop_Tlbimp - Fatal编程技术网

C# 使用tlbimp而不需要第二次组装?

C# 使用tlbimp而不需要第二次组装?,c#,com,com-interop,tlbimp,C#,Com,Com Interop,Tlbimp,我试图在我的C#dll中实现一个COM接口,供其他人使用。我在foo.idl中定义了一个接口 我通过tlbimp运行foo.idl来生成foo.dll,一个.Net程序集。现在要实现我的接口,我可以在我的dll中引用foo.dll来实现接口 这是一个很好的例子,但有一个例外:我现在必须分发两个DLL,而不是一个。这实际上违背了我正在从事的项目的要求:交付一个DLL 有没有办法将tlbimp dll合并到我的中,或者有没有其他方法(在C#中实现一个COM接口,而不使用第二个dll)?您可能会通过使

我试图在我的C#dll中实现一个COM接口,供其他人使用。我在foo.idl中定义了一个接口

我通过tlbimp运行foo.idl来生成foo.dll,一个.Net程序集。现在要实现我的接口,我可以在我的dll中引用foo.dll来实现接口

这是一个很好的例子,但有一个例外:我现在必须分发两个DLL,而不是一个。这实际上违背了我正在从事的项目的要求:交付一个DLL


有没有办法将tlbimp dll合并到我的中,或者有没有其他方法(在C#中实现一个COM接口,而不使用第二个dll)?

您可能会通过使用.tlb而不是“glue”dll进行欺骗

我建议您使用MSVC++/CLR创建一个混合模式程序集

这可能有一个缺点,即不能在同一个程序集中使用C。如果您想在混合中添加C代码,您可以使用

关于其他可能有趣的想法,请参见我先前的回答:


    • 您可能会通过使用.tlb而不是“glue”dll来作弊

      我建议您使用MSVC++/CLR创建一个混合模式程序集

      这可能有一个缺点,即不能在同一个程序集中使用C。如果您想在混合中添加C代码,您可以使用

      关于其他可能有趣的想法,请参见我先前的回答:


        • 一个好的反汇编程序可以完成这项工作,就像反射器一样。您可以简单地反汇编互操作程序集,并将生成的C#接口声明复制到源代码中。当然,只有在接口声明和IID稳定的情况下才应该这样做


          并肯定考虑升级到VS2010。它的“嵌入互操作类型”功能允许您在不使用互操作程序集的情况下发布程序集。

          一个好的反汇编程序可以完成这项工作,就像Reflector一样。您可以简单地反汇编互操作程序集,并将生成的C#接口声明复制到源代码中。当然,只有在接口声明和IID稳定的情况下才应该这样做


          并肯定考虑升级到VS2010。它的“嵌入互操作类型”功能允许您在不使用互操作程序集的情况下发布程序集。

          您将此操作向后进行:只需使用
          ComExport
          和相关属性将接口定义为C#接口,然后在目标计算机上使用
          regasm
          为COM互操作注册.NET程序集。您将此操作向后进行:只需使用
          ComExport
          和相关属性将接口定义为C#接口,然后在目标计算机上使用
          regasm
          为COM互操作注册.NET程序集。不幸的是,混合模式程序集不是一个选项。我正在构建的库是用C#编写的,结果需要一个dll。ILMerge可能是一个选项。不幸的是,混合模式程序集不是一个选项。我正在构建的库是用C#编写的,结果需要一个dll。ILMerge可能是一个选项。Facepalm。我正在使用VS2010,我只是不知道“嵌入互操作类型”功能。我现在知道了,谢谢!脸掌。我正在使用VS2010,我只是不知道“嵌入互操作类型”功能。我现在知道了,谢谢!