Windows8.1 x64
Visual Studio 2015
新建一个 'cpp_and_cs'互掉的工程,如下图所示:
① 选择 DLL;② 选择 空项目;③ 点击 完成;具体的如下图所示:
① 添加一个 “cpp_dll.cpp”的源文件;② 在源文件中添加如下的代码:extern 'C' __declspec(dllexport) int __stdcall getValueFromCppDll(){ return 100;}
编译后就可以看到生成的dll文件
创建一个C# 控制台应用程序,具体的如下图所示:
在C#中添加如下的代码:using System.Runtime.InteropServices; [DllImport('cpp_and_cs.dll')] private static extern int getValueFromCppDll();int nValue = getValueFromCppDll();System.Console.WriteLine(nValue);
将c++生成的dll拷贝一份到C#对应的目录下面去,如下图所示
将C#工程设置为启动项,使用快捷键Ctrl+F5 运行;
至此C#调用C++就完成了,下面开始讲解c++调用C#
创建一个c#的空项目,具体的如下图所示:
给工程添加一个“CSDLL.cs” 组件,如下图所示:
① 给 cs_dll 工程添加一个接口 ICSDLL② 在接口中添加如下方法名; getValueFromCsDll
① 右键 CSDLL.cs② 查看代码③ 在 CSDLL.cs 类型中添加方法 getValueFromCsDll具体的代码如下:public int getValueFromCsDll(){ return 200; }并且继承接口 ICSDLL
修改工程属性,编译的时候会报如下的错误: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”的访问被拒绝。
① 以管理员的方式启动Visual Studio 2015② 重新打开刚才的项目③ 重新编译
编译完后,可以发现多了 cs_dll.tlb 这个文件,至此C#的com组件便生成了
创建一个c++控制台应用程序,具体的流程如下:
将 '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具体的如下图所示:
创建一个文件: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;}运行后的效果如下:
方便他人亦是方便自己,如果觉得还行就点下下边的投票吧,这样可以帮助其他人更快的找到解决问题的方法;有疑问的也可留言哦, 谢谢!