I’ve been in software development for nearly 20 years specializing in C++, COM and C#. It’s truly an exicting time we live in, with so much resources at our disposal to gain and share knowledge. I hope my blog will serve a small part in this global knowledge sharing network.

For many years now I’ve been deeply involved with C++ development work. However since circa 2010, my work has required me to use more and more C# with a particular focus on COM interop.

I’ve also written several articles for CodeProject. In recent years I’ve concentrated my time more on helping others in the MSDN forums.

Please feel free to leave a comment whenever you have any constructive criticism over any of my blog posts.



13 thoughts on “About

  1. Hello Lim!

    I’ve recently started working with some P/Invoke implementations between C# and C++.
    I ran into some complications when trying to pass a complex struct between the two. I spent hours scouring the web for comprehensible information on the topic – then I found several of your wonderful posts on the msdn forums.

    I want to thank you for your easily comprehensible and detailed answers – they really helped me out.


    Posted by Johan Mannerqvist | April 16, 2012, 4:34 pm
  2. I am in the same situation as you are, 20 years doing software, all the way in c++, and recently working on c#.
    With C++, you can always ask why it’s like that, but with C#, more often it’s just the way it is, not much reasoning.
    That’s why I am not very much into the high level stuff. Are you in the states?

    Posted by Rio Wing | June 9, 2012, 5:12 pm
    • Hello Rio,

      I am in Singapore. Yes, I think C++ is a better language in many ways. Things are much more controllable. I really like the way destructors are automatically called when an object goes out of scope.

      With C#, this feature is no longer predictable. We are advised to use Dispose. I think there’s a different philosophy altogether with the presence of the runtime.

      – Bio.

      Posted by Lim Bio Liong | June 10, 2012, 8:38 am
  3. Hi Bio Liong,
    Hock Yan. I’m no longer programming but wanted to rebuild my skills (C++, C#, Java, Javascript, etc.). May need some help.

    Posted by chanhy | February 20, 2013, 8:33 am
  4. Some really interesting reading, but I seem to have a sitaution that no one seems to cover. Long time C/C++/assembler programming going to .net of course.

    BUT the situation I have found is a bit odd. I have a new system working, which uses MEF to load some assemblies for processing of ‘jobs’. No problems at all, the main engine even loads a few COM objects and passes references to them to the loaded assemblies, no problems.

    BUT I have a situation where I need to create a ‘logging COM interface’ in the .net main .EXE. This interface is for a defined interface ICTILog. No problems I was able to manually build the interface and a class. BUT NOW I need to pass a IDIspatch of that object I created into one of the COM objects as a properly put. Again not really a problem since I proved I could again create a true COM object of our logger and pass it in.

    BUT we want to log everything to log4net. so basically redirecting the loeaded COM objects to call back into the main EXE COM object simulation and it will call log4net. Along with capturing say console output, and the trace .net output etc. So that way everything is ine one place.

    BUT I can’t seem to figure it out at all. How to get a IDispatch I can pass into ‘abc.LoggingObject = ????’.

    I even tried using DispatchWrapper but that didn’t work either.

    Posted by Michael Shiels | August 20, 2013, 8:36 pm
  5. Hi Bio Liong, could you contact me promptly…some news for you.

    Posted by chanhy | November 16, 2013, 12:42 pm
  6. Hi Bio,
    I need your advice on passing double 2D arrays from C# to C++. Actually, I followed your blog on integer which worked perfectly. On doubles I am still struggling ..
    Many thanks.

    Posted by steve | October 20, 2015, 4:13 pm
  7. Hi! On the MSDN forum, I found a discussion where you’re implementing a MagTek Intellistripe 65 reader in C#.
    I’m trying to do the same thing, but I’m having quite some issues with my implementation and I was wondering if you’re interested in sharing your work? 🙂
    The feedback from MagTek is not optimal; they (still) don’t have any C# examples; nor a functional library that can be used along with this device.
    Looking forward to hear from you!
    Best regards,

    Posted by Steven | June 4, 2018, 2:15 pm
    • Hello Steven,

      1. Are you referring to the following MSDN post ? :

      “Unsafe code, pointer to LPVOID, LPSTR”

      2. If so, please note that the code examples that I used in that post were -not- implementations for the MagTek Intellistripe 65 reader.
      – For illustrative purposes, I wrote some sample McpEnum() and McpOpen() code.
      – These, however, were dummy samples and are not working MagTek Intellistripe 65 reader code.

      3. If you were referring to the C# code that calls into the MagTek reader (via MCPapi.dll), note that the code samples that I wrote in the post were limited to calling McpEnum() and McpOpen() only.
      – I personally am not familiar with the MagTek Reader nor its APIs.
      – I was showing the forum member iHijazi (the person who made the original post) how his _MCPBUS structure should be coded in C#.

      4. Sorry Steven, I don’t think I can provide any help here.

      – Bio.

      Posted by Lim Bio Liong | June 4, 2018, 6:50 pm
      • Hello Bio,

        Thanks for the quick feedback! And indeed, that was the post I was referring to!
        I’ll see if I can contact iHijazi about his implementation.
        Best regards,

        Posted by Steven | June 5, 2018, 10:53 am

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: