我有一个用VC++ 6编写的原生动态链接库,我没有访问源代码的权限。我想将其转换为托管代码,以便C#可以调用此库。问题在于VC6库大量使用std :: vector和std :: string作为函数参数,并且没有办法将这些类型直接封装到C#中。如何从C#调用原生VC++ 6库(使用std :: string作为参数)#
所以我需要的是VC6和C#之间的桥梁,并且我为VC++ 6实现了一个VC++ 2005包装器。但是,我从回复(通过jalf)意识到以下线程:“VC++ 6和VC++ 2005有不同的std :: string定义(并且编译器也可能插入不同的填充和其他更改),结果是垃圾,和/或不可预知的行为和崩溃“。
Passing std::string from VC++2005 to VC++6 DLL results in garbage
所以现在,最大的问题是,我怎么能调用从C#在VC++ 6本地库?
我很茫然,任何帮助,非常感谢。
这听起来像在第一个很好的解决方案,但你如何转换这种复杂类型std :: vector到其他可以从C/P调用的东西? –
Lopper
2009-11-27 01:49:22
如果你只需要传递它,'const char **'(即chars的动态数组的动态数组)就可以做到这一点(使用'CoTaskMemAlloc',并要求调用者释放它)。 – 2009-11-27 01:53:52
另一种方式,在VC++ 6中编写的“桥接/包装器”dll想要将char **传递回C#?在这种情况下,内存不能被释放,因为C#不能这样做。 – Lopper 2009-11-27 02:09:35