Make a .NET Assembly run as COM-Server

Because it’s the second project about COM i decided to write a short article about it. Com is great for extending old projects with great and creative .NET code 😉

How to achieve that:

1. Write a normal Class Library with Visual Studio

2. Mark your class with this attributes

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.None)]
[ComDefaultInterface(typeof(IUserHelper))]
[Guid("9602F34A-3E49-4A84-A408-5B8C67B3CE4D")]
public class UserHelper : IUserHelper
{

//Your Class Code

}

3. Implement an interface for your class with all your methods and properties that should be accessible via COM

[Guid("YOURGUID")]
[ComVisible(true)]
public interface IUserHelper
{
void SomeMethod(int param1, string param2);
}

4. Build your library

5. Use regasm.exe to register the dll. I use

regasm.exe "PathToDll.dll" /codebase /regfile

5. Execute the generated .reg file for creating all needed registry keys

6. Test your COM Server via a little vbScript

SET obj = CreateObject("NAMESPACE.CLASSNAME")
obj.METHODNAME Param1,"Param2"
MsgBox "Well done!"

 
Notes: Never ever use the VS tools like  „Make Assembly Com-Visible“ or „Register for COM interop“. It drives me crazy and is a waste of time at all. Keep in mind that this example is for platform target „Any CPU“. You should register it with reagsm.exe 32 bit wich is located in C:\Windows\Microsoft.NET\Framework\v4.0.30319. 64 bit version of regasm.exe is here: C:\Windows\Microsoft.NET\Framework64\v4.0.30319

Great article in .NET Pro (German):

http://www.dotnetpro.de/articles/onlinearticle4266.aspx

Regasm.exe reference:

http://msdn.microsoft.com/de-de/library/tzat5yw6(v=vs.80).aspx

Switchable desktop and mobile view in MVC projects

Scott made an awesome article about implementing a switchable desktop and mobile view in your MVC projects.

Additional hints:

The solution above provided doesn’t work for android phones. Add this code in your Global.asax to get it done.

DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("Mobile")
{
ContextCondition = ctx => ctx.GetOverriddenUserAgent().Contains("iPhone") || ctx.GetOverriddenUserAgent().Contains("Windows Phone OS") || ctx.GetOverriddenUserAgent().Contains("Android")
});

How to use AJAX in .NET MVC projects

When developing Web Projects one point you should always keep in mind is this: A great web project makes the user feel, that there is no web. You created a good user-experience when they just forget that they are working in a browser.

One way to achive that, is using AJAX as often as possible

Why? Because Page Load is a user experience killer. The complete page refreshes which is awful in UI and even worse for us programmers, cause we have to store user selections in our viewdata and so on. Very bad. Using ajax and refreshing only parts of your site makes the user feel comfortable and is actually easier for us programmers.

Code in your javascript file (I recommend to generate extra javascript files, to keep your views clean)

function drawChart(month, year) {
$.ajax({
url: '/YOURCONTROLLER/YOURMETHOD',
type: 'POST',
data: { param1: month, param2: year },
dataType: 'json',
success: function (data) {
//Make something with your data
}
})
};

Then in your Controller your functions should look like this

public JsonResult GetChartData(int month = 0, int year = 0)
{
//Generate or get your data from db
return Json(data);
}

Thats all. Easy and powerful.

Now, one last thing is your UI behavior. When you gather your data from a database you should display a loading panel or something like that, so your users know what’s going on. A great way to do this, is using the BlockUI Plugin for jQuery

Here you can see some demo cases:

http://www.malsup.com/jquery/block/#demos

And here is some example code (As mentioned above I recommend to extract all javascript and jquery code in separate files to keep your views clean!)

http://www.malsup.com/jquery/block/#page

Easy to use and looks very great. We’re in developers heaven 😉

Start with .NET MVC 4

.NET MVC is the first Microsoft technology which is really well documented and with practical samples. Beside that i like the architecture which is really simple but powerful. I never want to write a .NET ASP Project again.

Here you find all what you need to start:

http://www.asp.net/mvc

I highly recommend the Music Store Tutorial: http://www.asp.net/mvc/tutorials/mvc-music-store

Well done, Microsoft! (I don’t‘ say that, that much :))