卡在C#调用C写的DLL传递指针?请教高手
遇到一个dll,其中他的一个函数如下
Function:
Acquire ID data from ID information table in the internal DLL file.
Form:
int hst_idtblgetid(long recno, UCHAR *iddata)
Parameter:
recno Designated record number of acquired ID data
1~128
iddata Stored pointer for acquired ID data
Return value:
0 Normal End.
-1 Abnormal End.
关于这个UCHAR *iddata实在是郁闷,因找厂商无果,只能自己尝试
经过察看其vb代码,估计该函数调用后会返回iddata值。
vb代码如下
引用:
Public Declare Function hst_idtblgetid Lib "c:\HostCM32.dll " (ByVal recno As Long, ByVal iddata As String) As Integer
代码:
idret = "000000 "
ret = hst_idtblgetid(1, idret)
If ret = 0 Then
MsgBox " ok two " & idret
Else
MsgBox iddata
End If
老是:
未处理的“System.NullReferenceException”类型的异常出现在 firec.exe 中。
其他信息:
未将对象引用设置到对象的实例。
写下过程,请高手帮忙解答。
1、使用byte[]
引用部分:
[DllImport( "HostCM32.dll ")]
private static extern int hst_idtblgetid(long recno,out byte[] iddata);
代码:
byte[] abc=System.Text.Encoding.Default.GetBytes( "000000 ");
ret = hst_idtblgetid(0,out abc);
经尝试ref同样出错
2、使用string []
private static extern int hst_idtblgetid(long recno, out string [] iddata);
代码:
string[] abc=new string[6] ;
for(int k=0;k <6;k++)
abc[k]= "0 ";
ret = hst_idtblgetid(0,out abc);
同样尝试了ref
3、使用StringBuilder
同样
4、
private static extern int hst_idtblgetid(long recno, System.IntPtr iddata);
byte[] abc=System.Text.Encoding.Default.GetBytes( "000000 ");
System.IntPtr bp = Marshal.UnsafeAddrOfPinnedArrayElement( abc , 0 );
ret = hst_idtblgetid(0, bp);
5、char[]这个牵扯参数封装问题,估计也不行就没往下试
代码
char[] abc=new char [7] ;
for(int k=0;k <6;k++)
abc[k]= '0 ';
abc[6]= '\0 ';
ret = hst_idtblgetid(0,ref abc );
------解决方案--------------------vb代码如下
引用:
Public Declare Function hst_idtblgetid Lib "c:\HostCM32.dll " (ByVal recno As Long, ByVal iddata As String) As Integer
代码:
idret = "000000 "
ret = hst_idtblgetid(1, idret)
If ret = 0 Then
MsgBox " ok two " & idret
Else
MsgBox iddata
End If
这个是不是VB6下面的代码??是否可以正常使用??
------解决方案--------------------private static extern int hst_idtblgetid(int recno, string iddata);
这样就行了!
------解决方案--------------------我是十三月,接上午和你讲的,估计要用unsafe将string的指针传进去了.
<