Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Need to access variables within C# class

Posted on 2010-08-15
6
Medium Priority
?
257 Views
Last Modified: 2013-12-27
In the code below I want to access hLibModule and listner through out the code within the namespace, MyClass. I am getting "Cannot access a non-static member of outer type MyClass.Program' via nested type MyClass.Program.Local' error as the code stands. Can someone please help?

namespace MyClass
{
    public class Program
    {
        IntPtr hLibModule;
        MySecondClass listener;

        public class MyLocal
        {
            public void Init()
            {
                hLibModule = LoadLibrary("MyDLL.dll");
                if (DllRegisterServer() != 0)
                {
                    // MessageBox.Show("Could not initialize the SMSTrap DLL");
                }
                else
                {
                    listener = new MySecondClass ();

                }

            }
        }

        static void Main(string[] args)
        {
            // start SMS text trapping
            MyLocal lcl = new MyLocal ();
            lcl.Init();
           
        }
}
0
Comment
Question by:atomicgs12
6 Comments
 
LVL 86

Accepted Solution

by:
Mike Tomlinson earned 2000 total points
ID: 33443119
You'd need to declare "hLibModule" and "listener" as STATIC:

    public static IntPtr hLibModule;
    public static MySecondClass listener;
0
 
LVL 27

Expert Comment

by:nmarun
ID: 33443200
I'm a bit of a traditional programmer in the sense that I like things to be clear and distinct. So, is there a need for you to have nested classes? If not, keep them separate (and in separate files as well).

The way I'd write the Init method is that it would return a IntPtr. This way, my code looks lot more cleaner.

Arun

public class Program
{
    static IntPtr hLibModule;
    static MySecondClass listener;

    static void Main(string[] args)
    {
        // start SMS text trapping
        MyLocal lcl = new MyLocal();
        hLibModule = lcl.Init();

    }

}

public class MyLocal
{
    public IntPtr Init()
    {
        IntPtr hLibModule = LoadLibrary("MyDLL.dll");
        if (DllRegisterServer() != 0)
        {
            // MessageBox.Show("Could not initialize the SMSTrap DLL");
        }
        else
        {
            listener = new MySecondClass();

        }

        return hLibModule;

    }
}

Open in new window

0
 
LVL 1

Expert Comment

by:funazonki
ID: 33444968
If you want to hide hLibModule from the rest of the app, then the declaration structure is reasonable. In which case simply using

 static IntPtr hLibModule;

will work. Watch out for multi-threading though. If more than one thread can access hLibModule and the code it leads to is not re-entrant you will need to put lock statements round the access
0
Free Backup Tool for VMware and Hyper-V

Restore full virtual machine or individual guest files from 19 common file systems directly from the backup file. Schedule VM backups with PowerShell scripts. Set desired time, lean back and let the script to notify you via email upon completion.  

 

Author Comment

by:atomicgs12
ID: 33507758
nmarun: - how does 'listener' in Class MyLocal get reconized?
0
 
LVL 27

Expert Comment

by:nmarun
ID: 33513570
Try using 'out' keyword and pass a type of the MySecondClass to the Init method.

hLibModule = lcl.Init(out listener);

public IntPtr Init(MySecondClass listener)
{
    //...
}

Here's more information on the 'out' and 'ref' keywords:
http://geekswithblogs.net/ftom/archive/2008/09/10/c-and-the-difference-between-out-and-ref.aspx

Arun
0
 
LVL 27

Expert Comment

by:nmarun
ID: 33556256
Did this work for you?

Arun
0

Featured Post

How to Use the Help Bell

Need to boost the visibility of your question for solutions? Use the Experts Exchange Help Bell to confirm priority levels and contact subject-matter experts for question attention.  Check out this how-to article for more information.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In this article we will discuss all things related to StageFright bug, the most vulnerable bug of android devices.
Simulator games are perfect for generating sample realistic data streams, especially for learning data analysis. It is even useful for demoing offerings such as Azure stream analytics, PowerBI etc.
Want to learn how to record your desktop screen without having to use an outside camera. Click on this video and learn how to use the cool google extension called "Screencastify"! Step 1: Open a new google tab Step 2: Go to the left hand upper corn…
In a question here at Experts Exchange (https://www.experts-exchange.com/questions/29062564/Adobe-acrobat-reader-DC.html), a member asked how to create a signature in Adobe Acrobat Reader DC (the free Reader product, not the paid, full Acrobat produ…
Suggested Courses

783 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question