PInvokeStackImbalance Excpetion

If you get a PInvokeStackImbalance exception it could be:

  • One parameter has a wrong type (p. x. int changed to long)
  • The CallingConvention of the DllImport. Change it in the declaration:
    [DllImport("user32.dll", EntryPoint="SetWindowLongA", SetLastError=true)]
    		private static extern long SetWindowLong (IntPtr hwnd, int nIndex, long dwNewLong);

    for example to

C# Show Console in WPF App

Use the following snippet to declare the Win32 function

        [DllImport("kernel32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool AllocConsole();

and this one to show the console


Revisioncontrol with Git

The most fundamental difference between Git and other revision control systems like SVN or CVS is the way how you work with it. With Git you will usually clone a repository. This creates a directory on your desktop where all the data about all revisions is stored. This means that you are not depending on a server somewhere. You can easily just use git locally.


C# Performance/Memory Pitfalls

Some things you could look for in the code


Rename Pictures based on Exif information

exiv2 -r'%Y-%m-%d %H%M :basename:' rename $(ls)
Renames all pictures in a directory. For example the file DSCF1200.jpg will be called 2011-12-30 1210 DSCF1200.jpg.


Mount Windows File Shares

Mounts the folder photo on from the server into the directory mount on our local machine. It uses youruser and youpassword to authenticate

sudo mount -t cifs -o username=youruser,password=yourpassword // /mount/


Installation of Certificate into Trusted Root Certification Authorities store

If you visit a webpage with a self-signed certification you will usually see the following warning: There is a problem with this website's security certificate.

To avoid the messge you need to install the certificate into the Trusted Root Certification Authorities certificat store. This can be done very easily with executing the following command:

certmgr -add Certificate.cer -s -r localMachine root

The certmgr command line tool can be found in the Windows Driver Kit Version 7.1.0


Run .NET Applications in 32-Bit Mode under 64-Bit Windows

Sometimes it is necessary to run .NET applications in 32-Bit mode. One example is the usage of Adobe Reader Interop Libraries which will crash if they run in 64-Bit mode.

cd C:\Windows\Microsoft.NET\Framework64\v2.0.50727
ldr64 setwow

This will force all .NET applications to be run in 32-Bit mode.

MSI Install Errror with CustomAction to execute a VBS-Script

The following error: "There is a problem with this Windows Installer package. A script required for this install to complete could not be run. Contact your support personnel or package vendor"

Usually results from using the line:

	Set WShell = WScript.CreateObject("WScript.Shell")

instead of

	Set WShell = CreateObject("WScript.Shell")

this is caused because inside a MSI vbs-Scripts are executed with a different object model than when running standalone.



Show PDF-Documents in a C# WPF Application

The easiest way to do this is to display the Adobe Reader Browser Plugin. This can be done with a UserControl which can be hosted in a WindowsFormsHost control in a WPF Form. You require a reference to the dlls AxInterop.AcroPDFLib.dll and Interop.AcroPDFLib.dll which you can find in the Reader SDK on the Adobe Developer Homepage. The code for a UserControl is shown below:



Subscribe to RSS