C#中调用c++的dll具体创建与调用步骤,亲测有效~
使用的工具是VS2010哦~其他工具暂时还没试过
![](https://images2015.cnblogs.com/blog/779025/201511/779025-20151122103746796-1629472051.png)
![](https://images2015.cnblogs.com/blog/779025/201511/779025-20151122144748483-1939826720.png)
我新建的工程名是my21dll,所以会生成2个同名文件。接下来需要改动的只有画横线的部分
![](https://images2015.cnblogs.com/blog/779025/201511/779025-20151122103819890-1093999342.png)
![](file:///E:/%E6%9C%89%E9%81%93%E4%BA%91%E7%AC%94%E8%AE%B0/hangdianlyn@163.com/10b7e2bbeeb04d4cb7a9089a17fe38f9/clipboard.png)
下面是my21dll.h里面的。。。
下面的1是自动生成的不用动,或者也可以不要,因为只是一个宏而已下面可以做相应修改。
下面的2是自动生成的类,我没用就注释掉了
下面的3是自动生成的一个测试函数,原来函数最前面是extern,记住精髓是要改成EXTERN_C
下面的4是我自己写的一个测试函数,用来求和
![](https://images2015.cnblogs.com/blog/779025/201511/779025-20151122103832374-484802966.png)
![](file:///E:/%E6%9C%89%E9%81%93%E4%BA%91%E7%AC%94%E8%AE%B0/hangdianlyn@163.com/2ba7cfc45b57484d8cd43855867e79fd/clipboard.png)
下面是my21dll.cpp里面的
号3对应上面号3的函数,号4对应上面号4对应的函数。
![](https://images2015.cnblogs.com/blog/779025/201511/779025-20151122103912874-50632193.png)
![](file:///E:/%E6%9C%89%E9%81%93%E4%BA%91%E7%AC%94%E8%AE%B0/hangdianlyn@163.com/f2e3c6c4784f4184b391be11ac31afb0/clipboard.png)
下面要修改工程的属性
![](https://images2015.cnblogs.com/blog/779025/201511/779025-20151122103926436-245318087.png)
![](file:///E:/%E6%9C%89%E9%81%93%E4%BA%91%E7%AC%94%E8%AE%B0/hangdianlyn@163.com/c992f6b0a04642328b424cb00e14e889/clipboard.png)
下面是生成dll,两个红线的都可以
![](https://images2015.cnblogs.com/blog/779025/201511/779025-20151122103939140-1150721136.png)
![](file:///E:/%E6%9C%89%E9%81%93%E4%BA%91%E7%AC%94%E8%AE%B0/hangdianlyn@163.com/53194542437946ba99f3a67efba66626/clipboard.png)
然后就可以在DeBug文件夹下看到dll了(~ ̄▽ ̄)~
![](https://images2015.cnblogs.com/blog/779025/201511/779025-20151122103954311-194250858.png)
![](file:///E:/%E6%9C%89%E9%81%93%E4%BA%91%E7%AC%94%E8%AE%B0/hangdianlyn@163.com/516457b1b0ad4f96a6ca3543aec96825/clipboard.png)
再创建一个c#的控制台程序调用看看吧
我那是两个分开的函数,所以每一个都要写一个DllImport和extern static来声明,然后下面就可以像调用普通函数一样调用了。<( ̄ˇ ̄)/
![](https://images2015.cnblogs.com/blog/779025/201511/779025-20151122104013358-849816271.png)
![](file:///E:/%E6%9C%89%E9%81%93%E4%BA%91%E7%AC%94%E8%AE%B0/hangdianlyn@163.com/7e56d782fa9443e899b1a2f490113a5d/clipboard.png)
输出
![](https://images2015.cnblogs.com/blog/779025/201511/779025-20151122104026108-391689050.png)
![](file:///E:/%E6%9C%89%E9%81%93%E4%BA%91%E7%AC%94%E8%AE%B0/hangdianlyn@163.com/1add796123054859abfe74b00438d9bb/clipboard.png)
后来我又测试了一下,假如c#中调用的c++函数里调用了c++里的其他函数,里面套用的那些函数也需要声明吗?
我先把.h里面的fnmy21dll()注释掉
![](https://images2015.cnblogs.com/blog/779025/201511/779025-20151122104039452-480827170.png)
![](file:///E:/%E6%9C%89%E9%81%93%E4%BA%91%E7%AC%94%E8%AE%B0/hangdianlyn@163.com/4986e26042364932900c95191da0a9a8/clipboard.png)
又把.cpp文件里函数做了相应修改
![](https://images2015.cnblogs.com/blog/779025/201511/779025-20151122104054468-1102686276.png)
![](file:///E:/%E6%9C%89%E9%81%93%E4%BA%91%E7%AC%94%E8%AE%B0/hangdianlyn@163.com/cc4a1291131a455eb40d25f42e04507b/clipboard.png)
c#的函数也只声明了Add函数,看看行不行~
![](https://images2015.cnblogs.com/blog/779025/201511/779025-20151122104111530-216671367.png)
![](file:///E:/%E6%9C%89%E9%81%93%E4%BA%91%E7%AC%94%E8%AE%B0/hangdianlyn@163.com/43d649226f634082a440a740190ead9a/clipboard.png)
结果,没问题,成功了,说明只要最终在c#中显示出来的函数进行了声明就可以了,而且那些被调用的函数也可以像普通函数那样去写,只有不要export的函数写上输出的声明就可以了(^-^)V
![](https://images2015.cnblogs.com/blog/779025/201511/779025-20151122104123249-2075128239.png)
![](file:///E:/%E6%9C%89%E9%81%93%E4%BA%91%E7%AC%94%E8%AE%B0/hangdianlyn@163.com/abc82a3309644d7e94a1cbdfc4b31c53/clipboard.png)
分类: C#