2012-07-02 93 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();