最近的项目又要增加调用C++开发的dll了。函数名称都一样,就是不成功。以前都是这么调用的,怎么就不行了呢。
最后实在没办法了,就把C++开发的dll的代码死气摆列的要来,加到工程里调试看下。结果才恍然大悟,参数个数不相同。
这就发现了一个C#调用C++的大问题
如果函数名称不对,他会报错,但如果函数名称对了,参数个数少了他是不会报错的。
例如
C++ dll 中函数
void example (int a1,int a2,int a3,char* b1,char* b2)
你用C#调用接口为
void example (int a1,int a2,int a3,string b1,string b2)
但如果用
void example (int a1,int a2,string b1,string b2) 也会正常调用,但运算结果是错误的!
即程序不会报错的,只是你调用的结果不对而已。
经过调试,发现他是把参数依次扔进C++的dll的。
即,a1--a1,a2-a2,b1-a3,b2-b1 所以返回的结果就是错误的,但程序没有任何报错显示。