Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Preprocessor directive in C# for importing based on platform

Tags:

c#

Looking for a preprocessor directive in c# for importing dll based on whether the executable is 64bit or 32 bit:

#if WIN64 [DllImport("ZLIB64.dll", CallingConvention=CallingConvention.Cdecl)] #else [DllImport("ZLIB32.dll", CallingConvention=CallingConvention.Cdecl)] 
like image 213
user85917 Avatar asked Aug 21 '09 18:08

user85917


People also ask

What is preprocessor commands in C?

In simple terms, a C Preprocessor is just a text substitution tool and it instructs the compiler to do required pre-processing before the actual compilation. We'll refer to the C Preprocessor as CPP. All preprocessor commands begin with a hash symbol (#).

What is preprocessor directive and its types?

There are 4 Main Types of Preprocessor Directives: Macros. File Inclusion. Conditional Compilation. Other directives.

What is the preprocessor file in C?

The C preprocessor is a macro processor that is used automatically by the C compiler to transform your program before actual compilation. It is called a macro processor because it allows you to define macros, which are brief abbreviations for longer constructs.


2 Answers

Here's what you need to do.

First, go into Project-><project name> Properties... and go to the Build tab.

In there, in the textbox labelled "Conditional compilation symbols", add WIN32 for your x86 platform (selectable at the top of the dialog) and WIN64 for your x64 platform. Then save.

Note that if you have one for "AnyCPU", you probably want to remove that platform altogether, as it won't be safe.

Then, go into the source, and write this:

#if WIN64     [DllImport("ZLIB64.dll", CallingConvention=CallingConvention.Cdecl)] #else     [DllImport("ZLIB32.dll", CallingConvention=CallingConvention.Cdecl)] #endif 

Note that when you view the source, one of the lines will look like it has been commented out, in that the entire line is in a gray font. This line is the one for the "other platform". If you select the platform in the toolbar, you'll notice that the syntax coloring follows suit.

Of course, after re-reading my answer I notice that you don't actually need to put WIN32 into the conditional symbols list as it isn't used, but it might be useful other places to do an #if on WIN32 instead of 64.

like image 87
Lasse V. Karlsen Avatar answered Sep 22 '22 12:09

Lasse V. Karlsen


You'll have to add a conditional compilation symbol for each target platform in your project's properties, in the Build tab. Simply add a symbol for the given Platform as determined by the Platform drop-down at the top of the Build form. Changing Platform will allow you do add different symbols that apply only to a build for that platform.

like image 41
Ed S. Avatar answered Sep 21 '22 12:09

Ed S.