问题一:在C#中调用了C++生成的dll,其中一个函数系统提示说未将引用应用到对象实例,但是另外的一个函数就是好用的,好用的参数传得是int,出错的是string,会有关系么。(直接用的C,没有使用类)
问题二:再次尝试,使用导出类中函数,不过名字会有变,但是在EntryPoint里做了相应的定义,这次好像是所有的函数都是没有将引用应用到对象实例。这次我估计是没有导出类的关系,只是导出函数,是不是如此类就没有办法实例化?
问题三:如果按类导出,在C#中如何使用?需要先将这个类实例化,然后
public static extern void chuck(string s);
????
问题四:参数到底如何传递,好像没有讲的太明白的帖子,我现在主要考虑string类型的参数拜托各位大侠出手相助了!!!
问题二:再次尝试,使用导出类中函数,不过名字会有变,但是在EntryPoint里做了相应的定义,这次好像是所有的函数都是没有将引用应用到对象实例。这次我估计是没有导出类的关系,只是导出函数,是不是如此类就没有办法实例化?
问题三:如果按类导出,在C#中如何使用?需要先将这个类实例化,然后
public static extern void chuck(string s);
????
问题四:参数到底如何传递,好像没有讲的太明白的帖子,我现在主要考虑string类型的参数拜托各位大侠出手相助了!!!
其中一个同样传string的函数是可以用的,但是别的不可以,而且他们也都调用了没有导出来的变量和函数。但是不能用的就被系统说“未将对象的引用设置到对象实例”,dll是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,
void _stdcall chuck(string s)
{
printf("string into chuck is:\n%s\n",s);
.......
}
void _stdcall wolfhome(string f3)
{
printf("string into wolfhome start is:%s\n",f3);
.......
}
c#中的调用如下
[DllImport("bear.dll",CallingConvention=CallingConvention.StdCall)]
public static extern void chuck([MarshalAs(UnmanagedType.LPStr)] string s);
[DllImport"bear.dll",CallingConvention=CallingConvention.StdCall)]
public static extern void wolfhomeseal([MarshalAs(UnmanagedType.LPStr)]string s);按理说传参数应该是同样的处理方式,但是在控制台上打印出来的是
string into chuck is:
asd24esd
string into wolfhome start is:?输入的两个字符串依次为"asd24esd"和"howdoyoudo"
也就是说同样的结构,传参数的时候,chuck正常,但是wolfhome传了一个"?"过去,这是怎么回事?