This is a preview version of Cyotek's blog and may be missing functionality and/or unstable. Please visit for the current version of the blog.
If you encounter any problems using this preview site, please contact us with the details.

Archived posts for All of 2019

Resolving compile error "Interop type cannot be embedded. Use the applicable interface instead"

interop com 3 Comments

Recently I've been experimenting with the Microsoft Windows Image Acquisition Library (WIA), a COM library that therefore requires the use of interop in .NET. In the course of testing some of the different features of this library I triggered a compile error I haven't come across for a long time. As it isn't often I work with COM interop I thought I'd write a quick post detailing how to resolve or work around the compile errors to more firmly cement it in my head for the next time.

In older versions of .NET (or Visual Studio), when you referenced a COM library an interop DLL was generated - you could always tell these from their filenames as they would start with Interop.. I also seem to remember that back in the days of .NET 1.1 I would manually run a utility program to generate the interop DLL's, to avoid some form of naming prefix.

Read More

CanoScan LiDE 100 Windows 10 Compatibility

hardware canoscan windows-10 8 Comments

Although officially the Canon CanoScan LiDE 100 scanner is not supported on Windows 10, I have found that it is fully functional. This article describes the versions of Windows I have tested the scanner with along with any observations.

The drivers page for the Canon CanoScan LiDE 100 scanner states that the scanner is not supported in Windows 10 (either 32 or 64 bit). As far as Windows goes it is officially supported from Windows 2000 to Windows 8.1, and also on OS X 10.5 - 10.10.

Read More

Book Review: The Ray Tracer Challenge

review book testing ray-tracer 0 Comments

The Ray Tracer Challenge Book Cover

A few months ago I heard about a book named The Ray Tracer Challenge by Jamis Buck. The premise of the book is that it would teach you how to write a ray tracer from scratch. The unique approach of the book (and one I have never come across in any other book) is that it would do this via a test driven approach - the book would provide the test cases and their inputs and outputs, and you fill in the blanks in your language of choice.

Read More

Error VSP1048 when trying to instrument assembly created using Visual Studio 2019

visual studio csproj deterministic 0 Comments

In short - projects created using Visual Studio 2019 by default are compiled in a deterministic fashion, meaning if you compile the file multiple times without any changes, you will get identical output each time. Previous versions of Visual Studio used to include the compilation timestamp as part of the file header, causing the output to be different each time.

I'm not sure of the reasons why, but some of the tools provided with older versions of Visual Studio are unable to process assemblies compiled with this flag - they report them as not being valid image files and won't continue.

Read More

Creating a custom type converter part 3: Types to string

c# TypeConverter ComponentModel struct 2 Comments Downloads

I have discussed creating type converters a few times on this blog, and recently came across another use for them. I have a .NET Standard library that uses a variety of struct instances that are sometimes properties of concrete classes. I also have a .NET Framework 4.7.2 demonstration application to work with the library that uses the PropertyGrid control to provide easy editing facilities.

Note: While in this article I'm talking about using type converters purely in relation for use with the PropertyGrid control, this isn't their only purpose (just as well otherwise they wouldn't be a part of .NET Standard I assume). You can learn more about the TypeConverter class on MSDN.

Read More

Setting tab stops in a Windows Forms TextBox control

c# winforms SendMessage pinvoke textbox EM_SETTABSTOPS 2 Comments Downloads

I was adding a Wizard to one of my applications, and the final screen of this Wizard was a summary of the user's choices. I wanted the user to be able to copy this to the Clipboard if required, and so I'd used a TextBox rather than the ListView I might have otherwise used. However, this presented a minor issue as I'd chosen to use tabs to delimit the information, and the varying length of text meant that this wasn't aligned as expected.

Previously I have "dealt" with this issue by cheating - I'd just add extra tabs to force everything to line up. However, I do plan on fully localising this application at some point, not to mention that even using a different font could potentially trigger the text to misalign once more. And so I decided to do it properly this time.

Read More

Changes to CrashPlan for Small Business that may affect developer backups

CrashPlan Code42 3 Comments

This morning I received the following email from Code42 regarding their CrashPlan for Small Business service

Dear Valued Customer,

Read More

Creating an ndrules file for use with NDepend

ndepend 0 Comments

A long time ago, I wrote of some initial experiences using NDepend. Since then, I've done little with the product, although I did integrate it with Jenkins for both pipeline and freestyle jobs and so every time the CI builds it executes NDepend. However, the NDepend configuration used by these jobs is (probably) significantly out of date.

As I've just upgraded NDepend to the current version, I thought I'd better update the configurations. Fortunately when I created NDepend projects, I always edited them to use an external rules file and to change all the paths to relative. Absolute paths don't work well in CI scenarios and it always felt very wrong to me to have every single project duplicating all the rules - updating them would be painful experience.

Read More

Migrating from Azure translation API version 2 to 3

c# api azure rest translate localization 0 Comments Downloads

Almost two years ago I wrote a post describing how to translate text using Azure cognitive services, however the API it uses is to be switched off and so I needed to migrate from the version 2 API to version 3.

Whilst most of the code I post on this blog is used in one form or another, I've been using the TranslationClient client presented in that article as-is for the past two years. OK, I changed the namespace. But otherwise it's identical.

Read More

Handling the orientation EXIF tag in images using C#

c# exif jpg orientation 0 Comments Downloads

Two weeks ago I received an interesting support ticket from a user of our ImageBox control, stating that when being used for .png files, the control was absolutely file but when used with .jpg files that had been rotated using Windows Explorer shell context menus, they were displayed in the original orientation.

As soon as I read the ticket I had a hunch what was going to be the ultimate cause, and was able to quickly reproduce the problem and then confirm my hunch.

Read More