那是在C++的代码中编写,类似于:
void MyFunc(ANSI LPSTR param1)
具体的你要参考下相关文档。
到了.NET中,如果参数是只读的(输入参数),使用STRING就足够了,如果是需要有返回值的(引用、输出参数)则必须使用STRINGBUILDER。
谢谢。
现在有个问题,是,输入参数在C++中 是LPStr 定义的,微软官方说用 string,并用 ANSI修饰,所以,我用ANSI修饰了,但是传入参数进去,还是不行。
我用C++去调用这个dll,就没有问题。郁闷了,主要是因为参数字符编码的问题,但是 在C#中,怎么也无法转换成Ansi的编码,总是 Unicode的。
[DllImport(@"e:\A.dll", CharSet = CharSet.Ansi)] public static extern int a([MarshalAs(UnmanagedType.LPStr)] ref string contentOfLicense, [MarshalAs(UnmanagedType.LPStr)] ref StringBuilder outputBuffOfLicense, ref int lengthOfOutputBuff);
按理说定义的没有问题
@幕后黑手-Boss: 不要加那个ref。
ref是引用。在被调用方修改变量的内容(应该说是修改变量指向的数据地址)。
虽然在C++中定义的参数是指针,但在.NET中,只需要直接使用string就好(string本身就是等同于一个lpstr的)。
只是,在C++定义中,把参数定义成LPCSTR和LPSTR是不同的(一个常量,一个变量),对应的.NET中,应该使用string和StringBuilder。