代码之家  ›  专栏  ›  技术社区  ›  DMCS

需要在C 2项目中“打包”一个C++ DLL/H/LIB/XML/EXE SDK到COM中使用

  •  1
  • DMCS  · 技术社区  · 17 年前

    我的老板是C++开发人员,我所需要做的就是编译它作为COM对象,然后将COM对象导入到我的C语言解决方案中。我的老板说,把SDK封装成COM对象只需要不到一个小时,即使是我,对C++编译一无所知。

    我以前在C#解决方案中使用过COM对象,所以一旦这样做了,我就可以毫无问题地继续下去了。

    但是,我不知道如何从2.dll文件、1.exe文件、1.lib文件、1.xml文件和12.h文件生成COM对象。是否有资源可以告诉我如何实现这一点?

    7 回复  |  直到 17 年前
        1
  •  3
  •   ChrisW    17 年前

    我的老板是C++开发人员,我所需要做的就是编译它作为COM对象,然后将COM对象导入到我的C语言解决方案中。

    没错, 然而 将其编译为COM对象是“困难的”(我的意思是,您不能这样做),除非它已经实现了COM API(如果它没有实现,那么您需要先实现COM API,然后才能将其编译为COM对象)。

    基本COM 它解释了如何使用C++创建COM对象,但它并不重要(对于构建COM对象来说,可能有更好的书)。 基本COM ,以及比C++更好/更简单的工具)。

    我认为你和/或你的老板有3个选择:

    1. 设计一个封装SDK API的COM API。创建导出此API的COM项目(使用您选择的语言)。通过调用底层SDK方法来实现这些API。要做到这一点,你可能需要一个知道C++的人,或者愿意花很多,比这个项目的“一个小时”长很多。
    2. 忘记使用COM;相反,将SDK构建为DLL,并使用PInvoke从.NET代码调用它。

    我的老板说,把SDK封装成COM对象只需要不到一个小时,即使是我,对C++编译一无所知。

        2
  •  1
  •   Nick    17 年前

    告诉你的老板,如果他花不到一个小时的时间来完成,他当然应该这样做:这样可以更有效地利用你的时间。

    我还建议ATL(不使用属性),但如果您没有经验,这可能需要一些时间才能正确完成。

        3
  •  0
  •   Nemanja Trifunovic    17 年前

    我的老板说应该用不到两分钟的时间 一个小时“结束”那里作为一个 COM对象,即使对我来说没有 C++编译知识。

    MSDN tutorial .

    不要

        4
  •  0
  •   lc.    17 年前

    这并不能完全回答你的问题,但是。。。

    This thread on the MSDN Forums 说明如何使用P/Invoke调用DLL。

        5
  •  0
  •   Brian Lyttle    17 年前

    代码可以为您编译和运行,这很好。也就是说,假设你能在一小时内做到这一点是完全不公平的。

    您是否检查过VisualStudio实际正在构建什么。它可能已经在构建COM对象。

    其他需要考虑的是 SWIG . Python开发人员通常使用它来包装C/C++代码,并提供对C#的一些支持。

    对于有经验的C++开发人员来说,托管C++路由可能更为可取,因为除了最简单的代码之外,所有的内存分配都需要了解很多。

        6
  •  0
  •   DMCS    17 年前

    我(实际上是我的领导和我)将首先尝试(通过System.Runtime.InteropServices的dlliport特性)对该公司提供的SDK的dll使用p/Invoke。我会告诉你事情的进展。

        7
  •  -1
  •   Hippiehunter    17 年前

    我认为您真正想要/需要的是C++/CLI,这样您就可以直接将它们构建到托管程序集中。这个想法是,你编写一个很普通的包装器,看起来像C和C++之间的交叉,然后它做剩下的。

    推荐文章