C#中调用c++的dll具体创建与调用步骤,亲测有效~
使用的工具是VS2010哦~其他工具暂时还没试过
我新建的工程名是my21dll,所以会生成2个同名文件。接下来需要改动的只有画横线的部分
![C#中调用c++的dll C#中调用c++的dll](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9abWxzWlRvdkx5OUZPaThsUlRZbE9VTWxPRGtsUlRrbE9ERWxPVE1sUlRRbFFrRWxPVEVsUlRjbFFVTWxPVFFsUlRnbFFVVWxRakF2YUdGdVoyUnBZVzVzZVc1QU1UWXpMbU52YlM4eE1HSTNaVEppWW1WbFlqQTBaRFJqWWpkaE9UQTRPV0V4TjJabE16aG1PUzlqYkdsd1ltOWhjbVF1Y0c1bg%3D%3D.jpg?w=700&webp=1)
下面是my21dll.h里面的。。。
下面的1是自动生成的不用动,或者也可以不要,因为只是一个宏而已下面可以做相应修改。
下面的2是自动生成的类,我没用就注释掉了
下面的3是自动生成的一个测试函数,原来函数最前面是extern,记住精髓是要改成EXTERN_C
下面的4是我自己写的一个测试函数,用来求和
![C#中调用c++的dll C#中调用c++的dll](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9abWxzWlRvdkx5OUZPaThsUlRZbE9VTWxPRGtsUlRrbE9ERWxPVE1sUlRRbFFrRWxPVEVsUlRjbFFVTWxPVFFsUlRnbFFVVWxRakF2YUdGdVoyUnBZVzVzZVc1QU1UWXpMbU52YlM4eVltRTNZMlpqTkRWaU5UYzBPRFJrT0dOa05ETTROVFU0TmpkbE56bG1aQzlqYkdsd1ltOWhjbVF1Y0c1bg%3D%3D.jpg?w=700&webp=1)
下面是my21dll.cpp里面的
号3对应上面号3的函数,号4对应上面号4对应的函数。
![C#中调用c++的dll C#中调用c++的dll](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9abWxzWlRvdkx5OUZPaThsUlRZbE9VTWxPRGtsUlRrbE9ERWxPVE1sUlRRbFFrRWxPVEVsUlRjbFFVTWxPVFFsUlRnbFFVVWxRakF2YUdGdVoyUnBZVzVzZVc1QU1UWXpMbU52YlM5bU1tVXpZelpqTkRjNE5HWTBNVGcwWWpNNU1XSmxNVEZoWXpNeFlXWmlNQzlqYkdsd1ltOWhjbVF1Y0c1bg%3D%3D.jpg?w=700&webp=1)
下面要修改工程的属性
![C#中调用c++的dll C#中调用c++的dll](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9abWxzWlRvdkx5OUZPaThsUlRZbE9VTWxPRGtsUlRrbE9ERWxPVE1sUlRRbFFrRWxPVEVsUlRjbFFVTWxPVFFsUlRnbFFVVWxRakF2YUdGdVoyUnBZVzVzZVc1QU1UWXpMbU52YlM5ak9Ua3laalppTUdFd05EWTBNak15T0dJME1qUmpZakF3WlRFMFpUZzRPUzlqYkdsd1ltOWhjbVF1Y0c1bg%3D%3D.jpg?w=700&webp=1)
下面是生成dll,两个红线的都可以
![C#中调用c++的dll C#中调用c++的dll](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9abWxzWlRvdkx5OUZPaThsUlRZbE9VTWxPRGtsUlRrbE9ERWxPVE1sUlRRbFFrRWxPVEVsUlRjbFFVTWxPVFFsUlRnbFFVVWxRakF2YUdGdVoyUnBZVzVzZVc1QU1UWXpMbU52YlM4MU16RTVORFUwTWpRek56azBObUpoT1RsbU0yRTJOMlZtWW1FMk5qWXlOaTlqYkdsd1ltOWhjbVF1Y0c1bg%3D%3D.jpg?w=700&webp=1)
然后就可以在DeBug文件夹下看到dll了(~ ̄▽ ̄)~
![C#中调用c++的dll C#中调用c++的dll](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9abWxzWlRvdkx5OUZPaThsUlRZbE9VTWxPRGtsUlRrbE9ERWxPVE1sUlRRbFFrRWxPVEVsUlRjbFFVTWxPVFFsUlRnbFFVVWxRakF2YUdGdVoyUnBZVzVzZVc1QU1UWXpMbU52YlM4MU1UWTBOVGRpTVdJd1lXUTBaamsyWVRaallUTTFORE5oWldNNU5qZ3lOUzlqYkdsd1ltOWhjbVF1Y0c1bg%3D%3D.jpg?w=700&webp=1)
再创建一个c#的控制台程序调用看看吧
我那是两个分开的函数,所以每一个都要写一个DllImport和extern static来声明,然后下面就可以像调用普通函数一样调用了。<( ̄ˇ ̄)/
![C#中调用c++的dll C#中调用c++的dll](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9abWxzWlRvdkx5OUZPaThsUlRZbE9VTWxPRGtsUlRrbE9ERWxPVE1sUlRRbFFrRWxPVEVsUlRjbFFVTWxPVFFsUlRnbFFVVWxRakF2YUdGdVoyUnBZVzVzZVc1QU1UWXpMbU52YlM4M1pUVTJaRGM0TW1aaE9UUTBNMlU0T1RsaU1XRXlaalE1TURFeE0yRTFaQzlqYkdsd1ltOWhjbVF1Y0c1bg%3D%3D.jpg?w=700&webp=1)
输出
![C#中调用c++的dll C#中调用c++的dll](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9abWxzWlRvdkx5OUZPaThsUlRZbE9VTWxPRGtsUlRrbE9ERWxPVE1sUlRRbFFrRWxPVEVsUlRjbFFVTWxPVFFsUlRnbFFVVWxRakF2YUdGdVoyUnBZVzVzZVc1QU1UWXpMbU52YlM4eFlXUmtOemsyTVRJek1EVTBPRFU1WVdKbVpUYzBZakF3TkRNNFpEbGlZaTlqYkdsd1ltOWhjbVF1Y0c1bg%3D%3D.jpg?w=700&webp=1)
后来我又测试了一下,假如c#中调用的c++函数里调用了c++里的其他函数,里面套用的那些函数也需要声明吗?
我先把.h里面的fnmy21dll()注释掉
![C#中调用c++的dll C#中调用c++的dll](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9abWxzWlRvdkx5OUZPaThsUlRZbE9VTWxPRGtsUlRrbE9ERWxPVE1sUlRRbFFrRWxPVEVsUlRjbFFVTWxPVFFsUlRnbFFVVWxRakF2YUdGdVoyUnBZVzVzZVc1QU1UWXpMbU52YlM4ME9UZzJaVEkyTURReU16WTBPVE15T1RBd1l6azFNVGt4WkdFd1lUbGhPQzlqYkdsd1ltOWhjbVF1Y0c1bg%3D%3D.jpg?w=700&webp=1)
又把.cpp文件里函数做了相应修改
![C#中调用c++的dll C#中调用c++的dll](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9abWxzWlRvdkx5OUZPaThsUlRZbE9VTWxPRGtsUlRrbE9ERWxPVE1sUlRRbFFrRWxPVEVsUlRjbFFVTWxPVFFsUlRnbFFVVWxRakF2YUdGdVoyUnBZVzVzZVc1QU1UWXpMbU52YlM5all6UmhNVEk1TVRFek1XRTBOVFZsWWpRd1pESTFaalF5WlRBME5UQTNZaTlqYkdsd1ltOWhjbVF1Y0c1bg%3D%3D.jpg?w=700&webp=1)
c#的函数也只声明了Add函数,看看行不行~
![C#中调用c++的dll C#中调用c++的dll](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9abWxzWlRvdkx5OUZPaThsUlRZbE9VTWxPRGtsUlRrbE9ERWxPVE1sUlRRbFFrRWxPVEVsUlRjbFFVTWxPVFFsUlRnbFFVVWxRakF2YUdGdVoyUnBZVzVzZVc1QU1UWXpMbU52YlM4ME0yUTJORGt5TWpabU5qTTBNRGd5WVRRME1HRTNOREF4T1RCbFlXUTVZUzlqYkdsd1ltOWhjbVF1Y0c1bg%3D%3D.jpg?w=700&webp=1)
结果,没问题,成功了,说明只要最终在c#中显示出来的函数进行了声明就可以了,而且那些被调用的函数也可以像普通函数那样去写,只有不要export的函数写上输出的声明就可以了(^-^)V
![C#中调用c++的dll C#中调用c++的dll](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9abWxzWlRvdkx5OUZPaThsUlRZbE9VTWxPRGtsUlRrbE9ERWxPVE1sUlRRbFFrRWxPVEVsUlRjbFFVTWxPVFFsUlRnbFFVVWxRakF2YUdGdVoyUnBZVzVzZVc1QU1UWXpMbU52YlM5aFltTTRNbUV6TXpBNU5qUTBaRGRsT1RSaE1XTmlaR1pqTkdJek1XTTFNeTlqYkdsd1ltOWhjbVF1Y0c1bg%3D%3D.jpg?w=700&webp=1)
分类:
C#