VC调用C#生成的类库DLL方法
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不能一样,要不编译会不通过
- namespace cs_com_class
- {
- [Guid("a83f8440-340f-45cf-b76c-4d2da0352590")]
- public interface ICSharpinterface
- {
- void Start(string strPluginPath);
- }
- [Guid("a83f8440-340f-45cf-b76c-4d2da0352591"), ClassInterface(ClassInterfaceType.None)]
- public class CICSharpinterface : ICSharpinterface
- {
- public CICSharpinterface()
- {
- }
- public void Start(string strPluginPath)
- {
- MessageBox.Show(strPluginPath, "这是C#接口弹出的");
- }
- }
- }
再对工程进行两项设置,
图 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
调用方法如下
- ICSharpinterfacePtr m_IPluginManageSharpPtr;
- int _tmain(int argc, _TCHAR* argv[])
- {
- ::CoInitialize(NULL);
- m_IPluginManageSharpPtr.CreateInstance(CLSID_CICSharpinterface);
- m_IPluginManageSharpPtr->Start(_bstr_t("VC传入的值,演示VC调用C# 类库"));
- ::CoUninitialize();
- return 0;
- }
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方法相关推荐
- vc调用matlab生成的C++dll库总结。
实验室的一个项目需要调用matlab程序.经过再三考虑,决定使用vc调用matlab导出库的形式.而我主要负责与matlab程序结合的工作.以下是今天工作的简要总结.全当是个备忘吧. 1:在matla ...
- VC调用C#的COM组件(DLL)
假设要进行二次开发的程序为 A.exe,要增加的功能使用增加DLL的方法来完成,设为Cdll.DLL,其中含有A.B.C等方法. 其中的方法A要用到C#类库Csharp.DLL中的方法A.要完成这个任 ...
- vc调用matlab生成的dll实例
http://blog.csdn.net/ithzhang/article/details/7444563 转载于:https://www.cnblogs.com/burellow/archive/2 ...
- 如何在Delphi 中调用C#生成的DLL类库
最近需要写一个和给上位机和下位机通讯的接口,而上位机是用Delphi开发的,所以就需要用C#做一类库给Delphi调用 大概步骤: 1.首先在VS2008中新建一个类项目名为TestDelphi,然后 ...
- C#调用Matlab生成的dll方法
其实整个过程比较简单,但是需要心细一点. 需要的工具:VS2005及以上版本,MATLAB2008B及以上版本,另外非常重要的需要安装一个MATLAB Compiler Runtime,这个文件(MC ...
- LabVIEW生成.NET的DLL——C#下调用NI数据采集设备功能的一种方法 [原创www.cnblogs.com/helesheng]
Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...
- vs2008中调用matlab生成的dll
vs2008中调用matlab生成的dll matlab版本为:matlab7.11.0(R2010b) vs2008 1.在matlab中生成dll 在m文件中实现如下功能: 获得N个魔方矩阵的秩. ...
- C#与VC相互调用之VC调用C#的DLL库
介绍 在之前的博文 C#与VC相互调用之C#调用VC的DLL https://blog.csdn.net/xinxin_2011/article/details/86704660 里面讲了C#程序如何 ...
- vs2010中c#中类库dll制作和引用方法
vs2010中c#类库dll制件 1.建立类库文件 2.写好类:注意类的级别对外要公共的属性public 3.按F6生成.dll文件,可在目录的debug中找到 vs2010中c#类库dll引用方法 ...
最新文章
- 一名毕业三年的女程序媛面试头条经验,重难点整理
- 网络公司如何快速获取网站关键词流量
- inet_ntop函数和inet_pton函数
- LOL手游王者局诺手教学,3级压制阿卡丽,全程一个拼字
- 解决ORA-15097 Cannot shutdown ASM if OCR is Located in ASM
- 菲尔茨奖得主丘成桐在清华设立数学英才班,比肩清华姚班
- jQuery左右循环滚动图片特效
- 【Python】Python3.7.3 - 虚拟环境:pyvenv过时;使用python -m venv命令
- linux系统下树莓派拍照,如何在树莓派上使用图片特效
- 日志的打印 —— Java 支持
- 基于Python的指数基金量化投资 - 指数的市盈率和市净率计算
- layer.open(常用)
- 小型机和PC服务器差异分析
- win10系统降级安装win7电脑系统教学
- 服务器系统可以重装系统,服务器上可以重装操作系统吗
- 软件测试【网络经典面试题】面经分享
- HJ68 成绩排序 ●●
- Linux命令行下使用飞信
- python——pycharm使用入门
- 还弄不懂相对路径和绝对路径,这篇文章带你简单剖析