我需要用c#调用一个dll文件,这个dll文件是用VC写的,具体的功能就是传入一个字符串后,输出一个字符串,而且传入的和返回的定义类型都是char*,c#里我调用dll的代码是这样写的:
public class TransferDll
{
[DllImpor("GetString.DLL",EntryPoint="GetCString",CallingConvention=CallingConvention.Winapi)]
public static extern StringBuilder GetCString(StringBuilder InuptString);
}
调用dll里面的函数是这样写的:
.........
.........
string strTest = null;
StringBuilder test = new StringBuilder();
StringBuilder testwo = new StringBuilder();
testwo.Append("磁盘驱动器");
testwo.Append('/');
test= TransferDll.GetCString(testwo);
strTest = test.ToString();
........
........
但是我编译的时候,老是报未将对象引用设置到对象的实例的错误。
我昨天看了半天,也没看出来是怎么回事,
各位高手看看,到底是怎么回事,
public class TransferDll
{
[DllImpor("GetString.DLL",EntryPoint="GetCString",CallingConvention=CallingConvention.Winapi)]
public static extern StringBuilder GetCString(StringBuilder InuptString);
}
调用dll里面的函数是这样写的:
.........
.........
string strTest = null;
StringBuilder test = new StringBuilder();
StringBuilder testwo = new StringBuilder();
testwo.Append("磁盘驱动器");
testwo.Append('/');
test= TransferDll.GetCString(testwo);
strTest = test.ToString();
........
........
但是我编译的时候,老是报未将对象引用设置到对象的实例的错误。
我昨天看了半天,也没看出来是怎么回事,
各位高手看看,到底是怎么回事,
public class TransferDll
{
[DllImpor("GetString.DLL",EntryPoint="GetCString")]
public static extern string GetCString( string InuptString);
}
我觉得老报这个错误,是不是我调用dll中的函数的时候,调用有错误?
我试试你说的。
我传入的参数在dll中要做转换,其实也没什么,dll中的函数起到一个翻译的功能,就是说,返回的参数是传入参数的其他国语言。
public class TransferDll
{
[DllImpor("GetString.DLL",EntryPoint="GetCString")]
public static extern IntPtr GetCString( string InuptString);
}
还是报一样的错,
具体怎样我也忘记了,搜索一下试试
我试试。
public class TransferDll
{
[DllImpor("GetString.DLL",EntryPoint="GetCString")]
public static extern IntPtr GetCString( IntPtr InuptString);
}
我试试。
StringBuilder testwo = new StringBuilder(1024);指定一个大小试试
呵呵,
调用函数为:
public static extern IntPtr GetCString( IntPtr InuptString);
返回的是一些数字,而实际上应该返回输入参数的英文。
而调用函数为:
public static extern string GetCString( IntPtr InuptString);
返回的是乱码,应该是类型不匹配,
大家再看看,有没有好的解决办法。
DllImpor("GetString.DLL",EntryPoint="GetCString")]
public static extern string GetCString( ref string InuptString);
或
DllImpor("GetString.DLL",EntryPoint="GetCString")]
public static extern string GetCString(ref StringBuilder InuptString);
用IntPtr 是错误的
[DllImpor("GetString.DLL",EntryPoint="GetCString")]
public static extern StringBuilder GetCString(ref StringBuilder InuptString);
若参数传入后经修改后返回就需要添加ref
我们一起创业,我们一起发财,我们一起快乐,我们一起努力!