从VB.net代码调用C#代码

时间:2009-12-15 15:53:56

标签: c# .net vb.net

这是我在某些Dll中的c#代码

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Win32;


namespace LP_Misc
{
    public class LP_Registery
    {
        LP_Registery()
        {
            ReadMyTestRegKey();
        }
        public void ReadMyTestRegKey()
        {

            RegistryKey regkey;/* new Microsoft.Win32 Registry Key */

            regkey = Registry.CurrentUser.OpenSubKey(@"Software\PCBMatrix\LPWizard\experimental");


            string[] valnames = regkey.GetValueNames();

            string val0 = (string)regkey.GetValue(valnames[0]);

            Console.Write("--------------------------------The {0} val is {1}", valnames[0], val0);

        }

    }
}

我试图从另一个dll中的某个vb代码调用它。

喜欢这个

Imports LP_Misc
.
.
.
Dim T As LP_Registery()

我没有收到任何错误,但它没有输入C#代码。 它只是跳过它并过去。

任何想法?

6 个答案:

答案 0 :(得分:7)

您没有实例化您的对象。你需要这个:

Dim T As New LP_Registery()

但是,您的构造函数是私有的,因此也不起作用。你需要在你的对象中使用它:

public LP_Registery()
{
    ReadMyTestRegKey();
}

答案 1 :(得分:3)

您的构造函数未声明为public,因此默认情况下在C#中它是private:

    LP_Registery()
    {
        ReadMyTestRegKey();
    }

将其更改为:

    public LP_Registery()
    {
        ReadMyTestRegKey();
    }

您也没有在VB.NET代码中调用构造函数。

T = new LP_Registery()

答案 2 :(得分:1)

没有New关键字,你的VB代码没有在C#dll中执行任何操作。将它作为VB代码的最后一行:

Dim T As New LP_Registry()

答案 3 :(得分:1)

代码中的这一行:

Dim T As LP_Registery()

...将T声明为LP_Registery类型的数组,但实际上并不创建它的任何实例。您可能希望将其更改为:

Dim T As New LP_Registery()

答案 4 :(得分:0)

您可能必须将csproject添加到与vbproject相同的解决方案中。确保在您的vbproj中,您通过引用引用了csproj。

答案 5 :(得分:0)

你不需要

Dim t as LP_Registery

t = new LP_Registery