C++ 与 C# 互掉

创建C++ dll库

  • 01

    新建一个 "cpp_and_cs"互掉的工程,如下图所示:

  • 02

    ① 选择 DLL; ② 选择 空项目; ③ 点击 完成; 具体的如下图所示:

  • 03

    ① 添加一个 “cpp_dll.cpp”的源文件; ② 在源文件中添加如下的代码: extern "C" __declspec(dllexport) int __stdcall getValueFromCppDll(){ return 100;}

  • 04

    编译后就可以看到生成的dll文件

通过C#调用C++dll

  • 01

    创建一个C# 控制台应用程序,具体的如下图所示:

  • 02

    在C#中添加如下的代码: using System.Runtime.InteropServices; [DllImport("cpp_and_cs.dll")] private static extern int getValueFromCppDll(); int nValue = getValueFromCppDll();System.Console.WriteLine(nValue);

  • 03

    将c++生成的dll拷贝一份到C#对应的目录下面去,如下图所示

  • 04

    将C#工程设置为启动项,使用快捷键 Ctrl+F5 运行;

  • 05

    至此C#调用C++就完成了,下面开始讲解c++调用C#

创建一个C# com 组件

  • 01

    创建一个c#的空项目,具体的如下图所示:

  • 02

    给工程添加一个“CSDLL.cs” 组件,如下图所示:

  • 03

    ① 给 cs_dll  工程添加一个接口 ICSDLL ② 在接口中添加如下方法名; getValueFromCsDll

  • 04

    ① 右键 CSDLL.cs ② 查看代码 ③ 在 CSDLL.cs 类型中添加方法 getValueFromCsDll 具体的代码如下: public int getValueFromCsDll(){       return 200; } 并且继承接口 ICSDLL

  • 05

    修改工程属性,编译的时候会报如下的错误: error MSB3216: 无法注册程序集“c:\users\fuke\documents\visual studio 2015\Projects\cpp_and_cs\cs_dll\bin\Debug\cs_dll.dll”- 拒绝访问。请确保您正在以管理员身份运行应用程序。对注册表项“HKEY_CLASSES_ROOT\cs_dll.CSDLL”的访问被拒绝。

  • 06

    ① 以管理员的方式启动Visual Studio 2015 ② 重新打开刚才的项目 ③ 重新编译

  • 07

    编译完后,可以发现多了 cs_dll.tlb 这个文件,至此C#的com组件便生成了

C++调用 C# com

  • 01

    创建一个c++控制台应用程序,具体的流程如下:

  • 02

    将 "cs_dll.dll" 和 "cs_dll.tlb" 从: C:\Users\fuke\Documents\visual studio 2015\Projects\cpp_and_cs\cs_dll\bin\Debug 拷贝一份到: C:\Users\fuke\Documents\Visual Studio 2015\Projects\cpp_and_cs\Debug 具体的如下图所示:

  • 03

    创建一个文件:cpp_exe.cpp,代码如下: #import "..\cs_dll\bin\Debug\cs_dll.tlb" int  main(){ cs_dll::ICSDLLPtr pCs = NULL;;  try {  HRESULT hr = CoInitialize(NULL);  if (FAILED(hr))   _com_issue_error(hr); hr = pCs.CreateInstance(__uuidof(cs_dll::CSDLL));  if (FAILED(hr))   _com_issue_error(hr); int nValue = pCs->getValueFromCsDll(); printf("nValue=[%d]\n", nValue); } catch (_com_error e) {  _bstr_t bstrMsg(e.Description());  char* szMsg = bstrMsg;  printf ("error: main failed, errinfo=[%s]\n", szMsg); return -1; } return 0;} 运行后的效果如下:

  • 04

    方便他人亦是方便自己,如果觉得还行就点下下边的投票吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!

(0)

相关推荐

  • 互盾苹果恢复大师怎么导出微信聊天记录

    使用微信时间长了,日积月累的微信聊天记录是一个麻烦,全删掉吧,还担心里面有重要的文件,不删掉的话,微信聊天记录大多会导致微信运行速度缓慢.在这种情况下,我们可以导出微信聊天记录,将之前的微信记录导出到 ...

  • 互盾苹果恢复大师怎么恢复微信删除的记录

    微信是我们生活中经常使用的一款社交软件,聊天.视频等等,极大方便了我们的生活.正常情况下,微信的聊天记录都保存在手机数据系统里面,但是,如果我们不小心删掉或者拉黑某个好友,之后重新验证加为好友的时候, ...

  • 微信如何快速删除已经把我删掉的人?

    微信上好友是越加越多,可是聊天的是越来越少,无奈生生的被这些僵尸好友占着内存,更可气的是,这些好友还悄悄的把你删除了,你却浑然不知.之前微信里不断有朋友发的那种清除僵尸粉啊之类的链接,还有一些清除僵尸 ...

  • 明日之后怎么互刷

    明日之后抄家机制如今有了很大的变化,主任不再掉落任何物品,不过这样就给了我们互刷资源的机会,那么我们该如何互刷呢? 操作方法 01 第一步 我们需要买好开启庄园的电池等道具,在营地的飞机旁边有个NPC ...

  • 左右互搏的游戏攻略

    <左右互搏>是一款挺特别的游戏,需要同时控制屏幕的两边. 步骤/方法 01 在屏幕的左边,通过重力感应避免泡泡被异型刺破. 02 在屏幕的右边,通过触摸印章用保护板接住泡泡. 03 防止它 ...

  • 如何互传软件应用程序

    智能手机区别于以前功能机的主要优势是有着海量的应用软件,也正是因为这样WindowsPhone的用户数很难比得上Android.iOS.对于一些很好用的软件我们有时会分享给朋友使用,但很多时候我们安装 ...

  • 苹果手机也会疯狂掉电?其实是你手机设置有问题

    现在手机已经是我们日常中最重要的工具之一,出门在外时经常使用手机进行上网以及联络朋友,但有时候你会发现,尽管是苹果手机,在正常使用手机的情况下,电池掉电也是非常的厉害,一个原因是过度使用了手机,另一个 ...

  • 记号笔写在白板上擦不掉怎么办(白板写上记号笔了怎么擦掉)

    记号笔一般是油性笔,所以用来给东西标记是很方便的,不容易被水冲洗掉.但是如果记号笔画在了桌子上,那么要把笔迹清除掉则是比较难的,因为用水是擦不干净的,通常用有机溶剂可能还会有些用,比如酒精,卸甲水等等 ...

  • Chrome浏览器崩溃掉的小技巧

    Chrome号称拥有最强的内存管理,标签之间互不影响,带来了更高的稳定性. 但是您只要在Chrome的URL栏里输入或者复制字符“:%”,就可以将整个Chrome浏览器崩溃掉 英文版本显示:“Whoa ...