日期:2014-05-19  浏览次数:20680 次

C# 调用C++的dll的问题,很长时间都没有搞定
问题一:在C#中调用了C++生成的dll,其中一个函数系统提示说未将引用应用到对象实例,但是另外的一个函数就是好用的,好用的参数传得是int,出错的是string,会有关系么。(直接用的C,没有使用类)
问题二:再次尝试,使用导出类中函数,不过名字会有变,但是在EntryPoint里做了相应的定义,这次好像是所有的函数都是没有将引用应用到对象实例。这次我估计是没有导出类的关系,只是导出函数,是不是如此类就没有办法实例化?
问题三:如果按类导出,在C#中如何使用?需要先将这个类实例化,然后
                public   static   extern   void   chuck(string   s);
                ????
问题四:参数到底如何传递,好像没有讲的太明白的帖子,我现在主要考虑string类型的参数

拜托各位大侠出手相助了!!!

------解决方案--------------------
题一:在C#中调用了C++生成的dll,其中一个函数系统提示说未将引用应用到对象实例,但是另外的一个函数就是好用的,好用的参数传得是int,出错的是string,会有关系么。(直接用的C,没有使用类)
====
1 string 注意编码以及字符串长度,因为C# string 是unicode,而c++不一定,且c++一般用\0来确定字符串的结尾。

问题二:再次尝试,使用导出类中函数,不过名字会有变,但是在EntryPoint里做了相应的定义,这次好像是所有的函数都是没有将引用应用到对象实例。这次我估计是没有导出类的关系,只是导出函数,是不是如此类就没有办法实例化?
====
c++ 中的类,除了c++ 别的语言基本使用不了,就连不同的c++编译器,都不一定通用,除非用com


问题三:如果按类导出,在C#中如何使用?需要先将这个类实例化,然后
public static extern void chuck(string s);
????
====
同三

问题四:参数到底如何传递,好像没有讲的太明白的帖子,我现在主要考虑string类型的参数
====
看看msdn
ms-help://MS.MSDNQTR.2003FEB.2052/cpguide/html/cpconmarshalingstrings.htm
注意装msdn2003,