代码不执行
小弟遇到一个问题,调用外部非托管的dll,SDK中只有VB语言的例子。
VB代码如下
Private Sub commandgetitemname_Click( )
Dim itemNo As Integer
itemNo = ReadItemNo() ‘获得项目总数
Dim result As Integer
Dim re As Integer
Dim i As Integer
Dim regname As String * 255
For i = 0 To itemNo - 1 Step 1 ‘读取各个项目名称,并添加到项目列表框中
result = GetItemNames(regname, i)
If result <> 0 Then
MsgBox (result)
Return
End If
List1.AddItem (regname)
Next i
关键就是GetItemNames这个函数的调用,例子中传了一个string类型的参数。代码执行没问题,能获取到。
但是我转成C#应该怎么做呢
[DllImport("kingvewcliend.dll")]
public static extern int GetItemNames(out string sName, ushort wItemId);
List<string> lstNames = new List<string>();
for (int i = 1; i < ReadItemNo(); i++)
{
string itemsNames;
GetItemNames(out itemsNames, (ushort)i);
lstNames.Add(itemsNames);
}
lstNames.ForEach(p => MessageBox.Show(p));
代码执行到GetItemNames(out itemsNames, (ushort)i);后面就不执行了,请教一下应该怎么调用呢
------最佳解决方案-------------------- [DllImport("kingvewcliend.dll")]
public static extern int GetItemNames(StringBuilder sName, int wItemId);
StringBuilder regname = new StringBuilder(256);
GetItemNames(regname, i);
------其他解决方案--------------------[DllImport("kingvewcliend.dll",
EntryPoint="GetItemNames",
ExactSpelling=false,
CallingConvention=CallingConvention.Cdecl)]
------其他解决方案--------------------看下GetItemNames(out itemsNames, (ushort)i);中得两个参数值和vb中得参数值有何区别,另外dll文件是否复制到debug文件夹下
------其他解决方案--------------------http://s.yanghao.org/program/viewdetail.php?i=40207
------其他解决方案--------------------
public static extern int GetItemNames(out string sName, ushort wItemId);
List<string> lstNames = new List<string>();
for (int i = 1; i < ReadItemNo(); i++)
{
string itemsNames;
GetItemNamesData(out itemsNames, (ushort)i);