c#调用c++的dll 尝试读取或写入受保护的内存……

编译了一个c语言的lib,然后用c++去调用这个lib,调用成功,没有异常,然后又把c++中调用c语言lib的函数导出成dll,调用成功,参数传递也没问题,但当运行到c++的dll函数中时报错:”尝试读取或写入受保护的内存,这通常指示其他内存已损坏”,下面是出错的代码:
        ssh_session session = ssh_new();
         ssh_connect(session);

运行到connect时报错,其中ssh_session是c语言lib中的结构体,ssh_connect是c语言lib的函数,求大神指教!

用c#调用这个c++的dll

看你在C#这里的函数申明是否正确,特别是字符串、指针,还有函数调用约定。搞清楚是cdecl还是stdcall,谁分配/释放内存

http://www.cnblogs.com/hongmaju/p/4727173.html

http://www.cnblogs.com/newstart/archive/2012/10/24/2736780.html

首先定位问题:
1 出现调用错误还是异常?
出现错误,可以查代码错误,出现异常,要看dll导出声明和引用声明
2 dll的函数是否真被调用?

3 dll的函数中哪行代码出了问题?

使用打印 trace或者log方式就能查出问题

你这里就一个参数ssh_session , 你ssh_new()方法不应该返回C++ 对象,而应该返回指针,然后ssh_connect的参数改为ssh_session 类型的指针在传给ssh_connect就OK了。