CyberFox CyberFox - 27 days ago 18
C++ Question

How to Interop between C# and C++

I'm attempting a very basic interoperation between the 2 languages. I basically have some performance intensive code I wanna handle in C++ and then get the result back to my application.

All is going to be compiled in Visual Studio.

i have chosen int to be the input and output type since marshalling can be a bit wonky and not really what i'm dealing with.

C++ i have:

#include "stdafx.h" // default from vs2013, no idea what it is

_declspec(dllexport) int Diu(int p) {
return p * 2;
}


C# i have:

using System;

namespace Interop {
public class Program{
[System.Runtime.InteropServices.DllImport("Hardworker.dll")]
public static extern int Diu(int p);

private static void Main(string[] args) {
Console.WriteLine(Diu(2));
}
}
}


So it's a pretty basic example. But I'm getting the exception:


An unhandled exception of type 'System.BadImageFormatException'
occurred in Interop.exe

Additional information: An attempt was made to load a program with an
incorrect format. (Exception from HRESULT: 0x8007000B)


The C++ project is created as a Console Application > Dll in the create dialog.
I checked the C++ dll in the disassembler and i can see a Diu as an exported symbol.

Uh. What did I miss about the setting up interop?

Answer

When you get this error: HRESULT: 0x8007000B is caused by paltform incompatibility.
Check that that your compiler profile are set to the same platform(x86, x64 or AnyCPU).