C#调用dll类型转换问题
dll中有这样一个函数:long WINAPI OpenComPort(long Port,unsigned char *ComAdr,unsigned char *FrmHandle);
我在c#中这样申明
[DllImport("RR9000.dll")]
public static extern Int32 OpenComPort(Int32 port, byte[] add, byte[] frmHandle);
程序中这样调用:
byte[] handle=new byte[10];
byte[] b ={ 0xFF};
Int32 l = declare.OpenComPort(1, b, handle);
但报错,提示可能类型不匹配。
主要问题应该是
unsigned char *ComAdr,unsigned char *FrmHandle两个参数如何传递。
该dll的函数中说明ComAdr是输入/输出参数;FrmHandle输出参数;
我测试了别的方式也报错,请问正确的如何传递?
--------------------编程问答-------------------- --------------------编程问答-------------------- ding --------------------编程问答-------------------- long 应该是int64吧 --------------------编程问答-------------------- stringbuilder吧。 --------------------编程问答-------------------- 绑定 ~ 我这问题也一直很迷糊 --------------------编程问答-------------------- 给点建议,没有人做过吗?
--------------------编程问答-------------------- OpenComPort 函数返回值类型为long ,而你这用int32去接收这个值可能不行吧,不知能否把long类型强制转换为int32. --------------------编程问答-------------------- 确认过vc的long,在c#中可以用int32的,主要是函数参数如何传递问题。 --------------------编程问答-------------------- 没人回应吗? --------------------编程问答-------------------- 用StringBuilder不行嘛? --------------------编程问答-------------------- StringBuilder不行 --------------------编程问答--------------------
long OpenComPort(int Port,string ComAdr,ref IntPtr FrmHandle);
int p = 1;
string comAddress = "19200,n,8,1";
IntPtr hwnd = new IntPtr(0);
Int32 res = OpenComPort(p, comAddress, ref hwnd);
具体的要多调试才知道,这几个参数要看具体意思,c,c++里,没有强类型检查,unsigned char*可能是BYTE[],也可能是int*如果是表示指针,要返回的,都要写ref。
不确定对不对,你试试。
--------------------编程问答-------------------- --------------------编程问答-------------------- 不懂,学习一下。 --------------------编程问答-------------------- StringBuilder不行吗
补充:.NET技术 , C#