none
c# 如何调用 c++编译好的dll RRS feed

  • 问题

  • 由于以前的项目后台是用VC++写的,现在前台打算用C#写,然后就要在C#上调用以前编译好的C++ DLL, 使得C#可以调用C++ DLL 中的类及变量。请问高手,如何使用?
    2010年1月29日 2:27

答案

  • 你好!
         如果你的C++编写的dll是一个标准的COM组件,可以通过直接添加引用来生成交互程序集来使用COM中的类!
         如果不是标准的COM组件,只能通过[DllImport("xxx")]这样的方式来声明里面的extern暴露出来的方法,无法直接使用里面的类!
         希望对你有帮助!
    周雪峰
    2010年1月29日 4:27
    版主

全部回复

  • 直接把DLL添加到你项目里面调用就可以了,不过要记住数据类型要对应,或者转换
    参照:http://www.cnblogs.com/virusswb/archive/2008/05/30/1210520.html
    努力+方法=成功
    2010年1月29日 2:34
  • 直接把DLL添加到你项目里面调用就可以了,不过要记住数据类型要对应,或者转换
    参照:http://www.cnblogs.com/virusswb/archive/2008/05/30/1210520.html
    努力+方法=成功
    按照你这样的方法调用是很不妥的。
    1:  我要调用C++里面的类,我如何调用。
    2: 这昂调用方法都是静态的。你调用两次Add函数看看,会出现什么结果。
    2010年1月29日 2:41
  • 你好!
         如果你的C++编写的dll是一个标准的COM组件,可以通过直接添加引用来生成交互程序集来使用COM中的类!
         如果不是标准的COM组件,只能通过[DllImport("xxx")]这样的方式来声明里面的extern暴露出来的方法,无法直接使用里面的类!
         希望对你有帮助!
    周雪峰
    2010年1月29日 4:27
    版主
  • 你好!
         如果你的C++编写的dll是一个标准的COM组件,可以通过直接添加引用来生成交互程序集来使用COM中的类!
         如果不是标准的COM组件,只能通过[DllImport("xxx")]这样的方式来声明里面的extern暴露出来的方法,无法直接使用里面的类!
         希望对你有帮助!
    周雪峰
    你好,我问过了。这个C++的dll是写成标准的COM组件的形式的。那请问有相关的调用说明文档吗?可否告知一二?
    2010年1月29日 6:26
  • 已经有C++编写的dll是一个标准的COM组件的dll文件了,现在在C#项目中需要把它引用过来,周版主说 可以通过直接添加引用来生成交互程序集来使用COM中的类!
    但是我不知道该如何添加,请会的赐教,最好有个说明文档之类的。
    2010年1月29日 7:14
  • regsvr32注册后,直接拖进去就行了

    2010年1月29日 7:54
  • 没人回答吗?急啊!
    2010年1月29日 8:16
  • 还有其他说法吗?在线等!

    2010年1月29日 8:17
  • 你好!
         先把这个COM组件在系统中注册,然后在你VS右上方的”解决方案资源管理器“中-》右键-》”引用“节点-》添加引用-》切换到”COM组件“选项卡-》找到你注册的组件-》选择-》确定
         具体可以参考:
    http://msdn.microsoft.com/zh-cn/library/z6tx9dw3.aspx
         希望对你有帮助!
    周雪峰
    2010年1月29日 8:26
    版主
  • 你好!
         我在另外一个帖子中已经做了回复,你试试看!
    周雪峰
    2010年1月29日 8:33
    版主
  • 你好!
         先把这个COM组件在系统中注册,然后在你VS右上方的”解决方案资源管理器“中-》右键-》”引用“节点-》添加引用-》切换到”COM组件“选项卡-》找到你注册的组件-》选择-》确定
         具体可以参考:
    http://msdn.microsoft.com/zh-cn/library/z6tx9dw3.aspx
         希望对你有帮助!
    周雪峰
    你好,我的意思是在里面使用类的时候,有没有特别的属性要注明,才能调用C++里面的类和方法,还是加进来之后,就像用C#里面的类这样直接使用就好了!
    2010年1月29日 8:45
  • 里面的类及方法参数的类型都会自动转换成C#相对应的吗?麻烦 周版主 再指教一二!
    2010年1月29日 8:54
  • 加进来后,直接用。C# 会帮助生成 proxy class。例如 Interop.MyControl.MyClass。一般都会放在 Interop 命名空间下。


    Mark Zhou
    2010年1月29日 8:55
  • 你好!
         你添加完引用后,引用下会多一个你刚刚添加节点!这个程序集中包括所有COM类型和接口的.NET包装类,你直接使用这些包装类就可以了,和使用其他.NET类是一样的,如果你不清楚包括哪些类,可以用”对象浏览器“查看!
          Ctrl+w,然后按j就可以调出对象浏览器了,“浏览”后面的下拉框选择“我的解决方案”,然后展开你添加的引用程序集节点,可以查看包括哪些类型!
    周雪峰
    2010年1月29日 11:51
    版主
  • 谢谢周版主哦!
    2010年2月3日 1:08
  • 不客气啊!
    周雪峰
    2010年2月3日 2:13
    版主
  • 直接引命令空间不可以吗?
    2010年2月3日 2:50