2012-07-02 94 views
0

我有一个VB类库,它是从一个封装非托管DLL的现有VB类构建的。 VB类库包含DLL函数和与DLL函数关联的各种结构和类型。当试图通过引用传递一个结构体时“使用未分配的本地变量”

我在C#项目中使用lib类,并且类lib中的一个函数需要我传递一个结构作为参数。这是我遇到麻烦的地方。

下面是DLL VB代码:

Declare Auto Function CtSetVRegister Lib "Ctccom32v2.dll" _ 
     (ByVal ConnectID As Integer, ByRef Storage As CT_VARIANT) As Integer 

这里是VB结构:

<StructLayout(LayoutKind.Sequential, Pack:=1)> _ 
Public Structure CT_VARIANT 
    Dim vRegister As Integer   'Variant Register desired 
    Dim type As Integer    'Format want results returned in 
    Dim precision As Integer   'Precision desired for floating point conversions 
    Dim flags As Integer    'Specially defined flags, 0 for normal, (indirection, etc.) 
    Dim cmd As Integer    'Special commands, 0 for normal operation 
    Dim taskHandle As Integer   'Alternate task handle for local task register access, 0 = default public 
    Dim slength As Integer   'Length of bytes returned in stringVar, not include null 
    Dim indexCol As Integer    'Column (X) selection, base 0 
    Dim indexRow As Integer    'Row (X) selection base 0 
    Dim IntegerIntVar As Integer   '32 bit signed integer storage 
    Dim FloatVar As Single   '32 bit float 
    Dim DoubleVar As Double  '64 bit double in Microsoft format 
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=223)> _ 
    Public stringVar() As Byte   'null terminated ASCII string of bytes (1 to 224) 
End Structure 

C#的方法我写信要求我在结构中设置必要的值和然后这些信息传递给DLL函数:

private void btnWriteVReg_Click(object sender, System.EventArgs e) 
{ 
     int results; 
     CTC_Lib.Ctccom32v2.CT_VARIANT Var;    
     Var.vRegister = int.Parse(txtVRegToRead.Text); 
     Var.cmd = 0; 
     Var.flags = 0; 
     Var.FloatVar = 0; 
     Var.IntegerIntVar = 0; 
     Var.DoubleVar = 0;    
     Var.precision = 6;    
     writeStatus.Text = ""; 

     Var.type = CTC_Lib.Ctccom32v2.CT_VARIANT_INTEGER; 
     Var.IntegerIntVar = Convert.ToInt32(txtVRegVal.Text);    

     Var.taskHandle = 0; 
     results = CTC_Lib.Ctccom32v2.CtSetVRegister(CTconnection,ref Var); 
     if ((results == SUCCESS)) 
     { 
      writeStatus.Text = "SUCCESS"; 
     } 
     else 
     { 
      writeStatus.Text = "ERROR"; 
     } 
    } 

我得到的错误:

Use of unassigned local variable 'Var'

对于如何正确地将结构'Var'传递给VB类库,我有点困惑。

回答

1

初始化变量

CTC_Lib.Ctccom32v2.CT_VARIANT Var = new CTC_Lib.Ctccom32v2.CT_VARIANT(); 
+0

谢谢!我正在从我从中获得类库的项目中获取VB代码。 noob错误。 –

+0

:)我们都去过那里。 – M3NTA7

0

必须创建无功的情况下,

CTC_Lib.Ctccom32v2.CT_VARIANT Var = new CTC_Lib.Ctccom32v2.CT_VARIANT();