Click here to Skip to main content
15,885,278 members
Please Sign up or sign in to vote.
2.00/5 (1 vote)
See more:
I am running Windows 7 Enterprise 64bit and Visual Studio 2012. The Program and the DLL Library and the class are all .NET 4.0.

As it started out the program had Dictionaries to contain the files found in a specific directory. Such as Dictionary myDictionary<string,> where the string was the filename and the int value was the status.
I tried to pass this along to the DLL function. On the DLL side there didn't seem to be a problem but on the program side it said that I could not use the Dictionary as a Type definition.
The only solution I could come up with was to encapsulate the dictionaries within a public class and then send that class to the function as an object.

So my Process is:

1.Instantiate the new class. Example: Files myFiles = new Files();
2.Add all the files I am tracking to the Dictionaries within the myFiles class and set the default status of each file.
3.The DLL is Referenced within the project and then set with a "using" statement. It is also instantiated within the main project. Example: ValidateFiles myvalidation = new ValidateFiles();
4.In the DLL there is a function called public void ValidateFile(object MyFiles) {...} which will read every line and verify that it is correctly formated.

The question I have is how do I get the Object MyFiles to see the Public methods and variables within the class I created and sent as an argument?
Posted

1 solution

There is a fundamental problem here, which is that the App needs a reference to the DLL in order to use the ValidateFiles class, and the DLL needs a reference to the App in order to use the Files object to access the Dictionary you are trying to pass.

This is a problem: it creates a circular dependency which means that if the two projects are part of the same solution, you can't compile!

Either move the "transport" class into the DLL so that the DLL doesn't need to reference the App (which is a poor idea from a code reuse perspective anyway) or create a third DLL to hold the transport" class and reference that from both the App and the DLL.

BTW: Passing a Dictionary directly is no problem, provided that both the Key and Value class types are known by both assemblies (or in an assembly referenced by both)
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900