2012-07-02 2 views
0

У меня есть библиотека классов VB, которую я создал из существующего класса VB, который обертывает неуправляемую DLL. Библиотека классов VB содержит функции DLL и различные структуры и типы, связанные с функциями DLL.«Использование неназначенной локальной переменной» при попытке передать структуру по ссылке

Я использую класс lib в проекте C#, и одна из функций класса lib требует, чтобы я передал структуру как аргумент. Здесь я столкнулся с бедой.

Вот VB код DLL:

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

необходимо создать экземпляр Var,

CTC_Lib.Ctccom32v2.CT_VARIANT Var = new CTC_Lib.Ctccom32v2.CT_VARIANT(); 
Смежные вопросы