当前位置: 代码迷 >> C# >> C#调用dll,函数参数类型如何定义
  详细解决方案

C#调用dll,函数参数类型如何定义

热度:97   发布时间:2016-05-05 04:26:41.0
C#调用dll,函数参数类型怎么定义
本帖最后由 bolt001 于 2015-03-12 21:20:35 编辑
1)dll中的GetInfo函数定义如下:
USHORT GetInfo(char *Manufacturer,char *Producer,char *SerialNumber,char *BufLength);
功能:读取找到的设备信息
参数:char *Manufacturer 厂商字符串,一般为: Rational
 char *Producer 产品字符串,一般为: USB302
   char *SerialNumber 产品序列号,一般为:XXXX-XXXX 即 “硬件版本号”-“软件版本号”
char *BufLength 设备缓冲区长度

2)C++中调用格式如下:
char manu[256],product[256],sernum[256],buflen[8],Reserved[10];
USHORT Connect=ConnectUSB303();
if(Connect==0)
{
GetInfo(manu,product,sernum,buflen);
EditManu.SetWindowText(manu);
EditProduct.SetWindowText(product);
EditSN.SetWindowText(sernum);
EditBufLen.SetWindowText(buflen);

问题:C#中如何定义及调用这个 GetInfo函数,我初步写了下编译通过,但不能调用
[DllImport("RationalScale.dll",EntryPoint="GetInfo")]
 public static extern ushort GetInfo(string Manufacturer, string Producer,  string SerialNumber,  string BufLength);?怎么定义?
 string manu = "1", product = "", sernum = "", buflen = "";?怎么定义?


 ushort us=ConnectUSB302();
GetInfo( manu,  product,  sernum,  buflen);
textBox2.Text = manu;

------解决思路----------------------
上面忘记写返回了,现在加上
如果直接调用1中的函数的话,他返回的是一个值,你就定义一个整型变量来接收他:int result = GetInfo(‘参数1’,‘参数2’,‘参数3’,‘参数4’);
如果你是要定义一个方法,然后来调用这个方法的话,就是:
public static ushort GetInfo(string Manufacturer, string Producer, string SerialNumber, string BufLength)   //此方法返回一个值
{
        ushort  result = 0;
        ...代码
        return result ;
}  

然后再你要调用的方法下面:
string Manufacturer = null, Producer = null, SerialNumber = null, BufLength = null;    //定义变量来当参数
 int  result = GetInfo(Manufacturer, Producer, SerialNumber, BufLength);   //定义整型来接收方法返回的值。
------解决思路----------------------
引用:
1)dll是C++中定义的函数,也是C#准备调用的;
2)是源程序的在C++中的调用;共大家参考的;

1楼的方法编译通不过,string无法转到StringBuilder
2楼的方法编译通过,但是不能运行,提示发生未经处理的win32异常。
谢谢大家了

..你真不懂C#? 上面改参数类型,也边的引用,当然也要跟着改呀,汗。
你直接string 传给StringBuilder当然编译不通过。。
  相关解决方案