VC调用C#生成的类库DLL方法

相关代码与原文地址

http://www.panshy.com/article/Sort_Desktop/other/2013-06-25/2415.php

VC调用C#生成的类库DLL方法

最新因为工作项目上的需求,VC需要调用C#开发的DLL,本来以为是很简单的事,可实际不是这样,因为C#编译出来的DLL与VC、VB、Delphi等这些工具编译出来的完全不一样,C#生成的DLL不是独立运行的程序,是某个程序的一个部分,只能由所属的程序(Microsoft .NET Framework )调用,Visual C#编译器生成的托管代码虽然也是二进制文件,但不是可以直接供计算机使用的原始代码。

网上搜出来的方法也不尽人意,第一种是:对VC++的环境中进行修改使其支持托管代码。第二种是 :C#生成DLL端编译成COM接口。第一种方法会造成VC崩溃现象 ,但是第二种方法网上说得实在太复杂,什么强命名工具,修改ssemblyInfo.cs文件中用AssemblyKeyFile属性等等。最终结果还是不知VC如何调C#类库。

直接上我使用的方法,也是基于COM的,但方法很简单!!!!:)

C# 工程

新建一个类库,然后在CS文件中导出你想提供给外部的接口,记得在文件最上面加 using System.Runtime.InteropServices;

导出接口的代码如下,下面的代码只导出了一个 Start  方法,代码中的GUID不能一样,要不编译会不通过

C# Code 复制内容到剪贴板
  1. namespace cs_com_class
  2. {
  3. [Guid("a83f8440-340f-45cf-b76c-4d2da0352590")]
  4. public interface ICSharpinterface
  5. {
  6. void Start(string strPluginPath);
  7. }
  8. [Guid("a83f8440-340f-45cf-b76c-4d2da0352591"), ClassInterface(ClassInterfaceType.None)]
  9. public class CICSharpinterface : ICSharpinterface
  10. {
  11. public CICSharpinterface()
  12. {
  13. }
  14. public void Start(string strPluginPath)
  15. {
  16. MessageBox.Show(strPluginPath, "这是C#接口弹出的");
  17. }
  18. }
  19. }

再对工程进行两项设置,

图 1

如图1所示,选中 Application选项卡,然后点击 Assembly Information按钮,打开一个对话框,如图2

图  2

Make assembly COM-Visible 复选框 钩选上,点OK按钮。

按图3方法,再选中 Build选项卡,在这里进行一项设置,将 output中的Register for COM interop复选框选中,保存参数设置编译这个C#工程

图 3

最后编译完成,查看生成目录是不是有一个后缀tlb的文件,示例中是cs_com_class.tlb

如果没有,请重新按上面方法进行C#设置,编译

最终C#方面就完成了,是不是很简单。

VC工程调用

//在你需要调用的头文件中引用C#的DLL  tlb的文件
#import "cs_com_class.tlb" no_namespace named_guids

调用方法如下

折叠 展开 C/C++ Code 复制内容到剪贴板
  1. ICSharpinterfacePtr m_IPluginManageSharpPtr;
  2. int _tmain(int argc, _TCHAR* argv[])
  3. {
  4. ::CoInitialize(NULL);
  5. m_IPluginManageSharpPtr.CreateInstance(CLSID_CICSharpinterface);
  6. m_IPluginManageSharpPtr->Start(_bstr_t("VC传入的值,演示VC调用C# 类库"));
  7. ::CoUninitialize();
  8. return 0;
  9. }

VC使用接口很简单,只需要在C#接口名后加上Ptr就是VC可以使用的智能指针,CLSID_CICSharpinterface  也是有规则的相信你能看得出来:)

在无开发环境的电脑上使用C# DLL需要用 RegAsm.exe 注册,RegAsm.exe aaa.dll类似这样的方法

RegAsm.exe可以在你的开发工具安装目录下搜索得到的。32位使用32位版,64位使用64位版

在此,VC调用C# DLL的方法就介绍完了,是不是很简单啊!!还有不明白的可以下载文章配套代码。

VC调用C#生成的类库DLL方法相关推荐

  1. vc调用matlab生成的C++dll库总结。

    实验室的一个项目需要调用matlab程序.经过再三考虑,决定使用vc调用matlab导出库的形式.而我主要负责与matlab程序结合的工作.以下是今天工作的简要总结.全当是个备忘吧. 1:在matla ...

  2. VC调用C#的COM组件(DLL)

    假设要进行二次开发的程序为 A.exe,要增加的功能使用增加DLL的方法来完成,设为Cdll.DLL,其中含有A.B.C等方法. 其中的方法A要用到C#类库Csharp.DLL中的方法A.要完成这个任 ...

  3. vc调用matlab生成的dll实例

    http://blog.csdn.net/ithzhang/article/details/7444563 转载于:https://www.cnblogs.com/burellow/archive/2 ...

  4. 如何在Delphi 中调用C#生成的DLL类库

    最近需要写一个和给上位机和下位机通讯的接口,而上位机是用Delphi开发的,所以就需要用C#做一类库给Delphi调用 大概步骤: 1.首先在VS2008中新建一个类项目名为TestDelphi,然后 ...

  5. C#调用Matlab生成的dll方法

    其实整个过程比较简单,但是需要心细一点. 需要的工具:VS2005及以上版本,MATLAB2008B及以上版本,另外非常重要的需要安装一个MATLAB Compiler Runtime,这个文件(MC ...

  6. LabVIEW生成.NET的DLL——C#下调用NI数据采集设备功能的一种方法 [原创www.cnblogs.com/helesheng]

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

  7. vs2008中调用matlab生成的dll

    vs2008中调用matlab生成的dll matlab版本为:matlab7.11.0(R2010b) vs2008 1.在matlab中生成dll 在m文件中实现如下功能: 获得N个魔方矩阵的秩. ...

  8. C#与VC相互调用之VC调用C#的DLL库

    介绍 在之前的博文 C#与VC相互调用之C#调用VC的DLL https://blog.csdn.net/xinxin_2011/article/details/86704660 里面讲了C#程序如何 ...

  9. vs2010中c#中类库dll制作和引用方法

    vs2010中c#类库dll制件 1.建立类库文件 2.写好类:注意类的级别对外要公共的属性public 3.按F6生成.dll文件,可在目录的debug中找到 vs2010中c#类库dll引用方法 ...

最新文章

  1. 一名毕业三年的女程序媛面试头条经验,重难点整理
  2. 网络公司如何快速获取网站关键词流量
  3. inet_ntop函数和inet_pton函数
  4. LOL手游王者局诺手教学,3级压制阿卡丽,全程一个拼字
  5. 解决ORA-15097 Cannot shutdown ASM if OCR is Located in ASM
  6. 菲尔茨奖得主丘成桐在清华设立数学英才班,比肩清华姚班
  7. jQuery左右循环滚动图片特效
  8. 【Python】Python3.7.3 - 虚拟环境:pyvenv过时;使用python -m venv命令
  9. linux系统下树莓派拍照,如何在树莓派上使用图片特效
  10. 日志的打印 —— Java 支持
  11. 基于Python的指数基金量化投资 - 指数的市盈率和市净率计算
  12. layer.open(常用)
  13. 小型机和PC服务器差异分析
  14. win10系统降级安装win7电脑系统教学
  15. 服务器系统可以重装系统,服务器上可以重装操作系统吗
  16. 软件测试【网络经典面试题】面经分享
  17. HJ68 成绩排序 ●●
  18. Linux命令行下使用飞信
  19. python——pycharm使用入门
  20. 还弄不懂相对路径和绝对路径,这篇文章带你简单剖析

热门文章

  1. 分析了5000部电影票房,发现赚钱的电影都有这些特征~
  2. ubuntu禁用键盘
  3. Python浮点数数组求和结果不精确问题
  4. Centos7 设置定时任务
  5. 06JS获取标签元素
  6. 【技巧】禁止chrome缓存
  7. 碧瑶答疑网—系统设计和任务分配
  8. 当年火鸟天堂网站为自己写的序
  9. 粒子动画 particles.js 在vue中的使用
  10. 使用Jquery筛选包含readonly属性的input标签